0

複雑なライブラリを使用するコードを作成しました。以下のコードでわかるように、関数の定義をヘッダー ファイルに入れ、main.cpp で複素数 "I" を定義しました。しかし、このコードをコンパイルしようとすると、エラーが発生します。

ヘッダーファイルの関数は複雑なライブラリを使用できないと思います。この問題を解決するにはどうすればよいですか?

ありがとう。

main.cpp

#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;
}

header.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を変更します。

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 に答える
2

header.hライブラリシンボルを使用する header()にライブラリヘッダーファイルをインクルードする必要があります。

#include <complex> 

他の方法で含まれるように依存するよりも、ファイルのすべての依存関係をそれ自体の中に含める方が常に良いです。ライブラリシンボル名の依存関係が他のインクルードheader.hを介して間接的に解決されない場所にインクルードされる可能性があります。

編集:

ちなみに、なぜ関数の定義をヘッダーファイル自体にインクルードしたのかわかりません。ヘッダーを変更して、宣言のみを含める必要があります。

header.h

#ifndef header
#define header

#include <complex> 

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

double function(double x);

#endif 

関数を定義する別のソースファイルを追加します

header.cpp

#include "header.h"    


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

main.cpp

#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 に答える