0

我写了一段使用复杂库的代码。我已将函数的定义放在头文件中,并且在 main.cpp 中我定义了复数“I”,您可以在下面的代码中看到。但是当我想编译这段代码时,我收到错误。

我认为头文件中的函数不能使用复杂的库。我该如何解决这个问题?

谢谢。

主文件

#include <iostream>
#include "math.h"
#include <complex>
#include "header.h"

using namespace std;
typedef complex<double> cmp;
cmp I(0.0,1.0);

int main()
{
cout << function(5.0) << endl;

return 0;
}

头文件.h

#ifndef header
#define header

double function(double x)
{
return 5*exp(I*x).real();
}

#endif
4

4 回答 4

4

问题是I在解析头文件时未定义。您需要I#include "header.h".

于 2012-08-30T04:15:41.970 回答
3

因为I是在header包含之后定义的,所以你的 main.cpp 基本上变成了这样:

double function(double x)
{
    return 5*exp(I*x).real();
}

using namespace std;
typedef complex<double> cmp;
cmp I(0.0,1.0);

编译器解析你的函数,并抛出一个错误,因为它不知道什么I是(还)。

您应该在函数之前包含函数依赖的任何常量,例如在头文件中:

#ifndef header
#define header

#include <complex>

typedef complex<double> cmp;
cmp I(0.0,1.0);

double function(double x)
{
    return 5*exp(I*x).real();
}

#endif
于 2012-08-30T04:17:56.020 回答
2

您应该在header.h使用库符号的 header() 中包含库头文件。

#include <complex> 

最好将文件的所有依赖项包含在其自身中,而不是依赖于它们被包含在内。也许您header.h被包含在某个地方,库符号名称依赖项不会通过其他包含间接解决。

编辑:

在旁注中,我不确定您为什么将函数的定义包含在头文件本身中。您应该将标题更改为只有声明:

头文件.h

#ifndef header
#define header

#include <complex> 

typedef std::complex<double> cmp;
extern cmp I;

double function(double x);

#endif 

添加另一个定义函数的源文件

头文件.cpp

#include "header.h"    


double function(double x)
{
    return 5*exp(I*x).real();
}

主文件

#include <iostream>
#include "math.h"
#include <complex>
#include "header.h"

using namespace std;
cmp I(0.0,1.0);

int main()
{
   cout << function(5.0) << endl;

return 0;
于 2012-08-30T04:12:21.767 回答
2

更改 header.h 以包含以下内容:

double function( std::complex<double> I, double x)

更改您的 main.cpp,使其包含以下内容:

cout << function(I, 5.0) << endl ;

您的问题是因为header.h您使用了不可见的变量 I。

于 2012-08-30T04:23:32.143 回答