gpt4 book ai didi

c++ - 将参数传递给另一个 C++ 源文件

转载 作者:太空宇宙 更新时间:2023-11-04 14:03:35 24 4
gpt4 key购买 nike

我已经尝试实现一个类函数大约一个星期了,但无济于事。通常,我会满足于将逻辑放在头文件中,但是,ACML 库与我对“复杂”包含的使用有冲突。长话短说,我需要从一个单独的 cpp 文件对 C ACML 库进行所有调用。下面是我的代码,我一直无法让它工作。我正在使用 Visual Studio 2013 预览版,但出现以下编译错误:

acml_lapack.h(8): error C3861: 'dgetrf_c': identifier not found

如何调用物理上位于另一个 *.cpp 文件中的函数并将参数传递给该函数?我找到了关于该主题的其他帖子,但我一定遗漏了一些东西,因为我的代码将无法运行。

头文件:

// acml_lapack.h
#ifndef __ACML_LAPACK
#define __ACML_LAPACK

void dgetrf(int m, int n, double *a, int *ipiv, int &info)
{
if (m && n)
dgetrf_c(&m, &n, a, &m, ipiv, &info);
}
#endif

额外的 *.cpp 文件:

// acml_lapack.cpp
#include <acml.h>
#include "acml_lapack.h"

void dgetrf_c(int *m, int *n, double *a, int *lda, int *ipiv, int *info)
extern "C" {
void dgetrf_(int *m, int *n, double *a, int *lda, int *ipiv, int *info); //call C AMD Core Math Library lapack
}

主要源文件:

// source.cpp
#include <acml_lapack.h>
using namespace std;

int main()
{
// **** Start test acml ****
double A[2][2];
A[0][0] = 1;
A[0][1] = 2;
A[1][0] = 3;
A[1][1] = 4;

cout << "before: " << endl;
cout << A[0][0] << A[0][1] << endl;
cout << A[1][0] << A[1][1] << endl;

int LDA = 2;
int * output;

//call external function from another cpp file
dgetrf(2, 2, *A, &LDA, *output);

cout << "after: " << endl;
cout << A[0][0] << A[0][1] << endl;
cout << A[1][0] << A[1][1] << endl;

// **** END TEST ****
}

最佳答案

您在 header 中缺少函数声明:

void dgetrf_c(int *m, int *n, double *a, int *lda, int *ipiv, int *info);

dgetrf 定义之前。请注意,将函数定义(即函数体)放在 header 中通常不是一个好主意,就像您对dgetrf 所做的那样。原因是您最终会得到散布在代码各处的同一函数的多个定义:每个包含包含其他文件(很可能是 cpp 文件)中的定义的 header 都有一个定义,编译器将不知道是哪一个选择作为合法的。解决这个问题的方法是将 dgetrf 代码放在一个 cpp 文件中,并且只在头文件中提供函数 declaration

关于c++ - 将参数传递给另一个 C++ 源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18049479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com