1

次のようなエラーが表示されます。

FxMathFunctions.h: In function 'FxInt32 IMin(FxInt32, FxInt32)':

FxMathFunctions.h:13: error: redefinition of 'FxInt32 IMin(FxInt32, FxInt32)'

FxMathFunctions.h:15: error: 'FxInt32 IMin(FxInt32, FxInt32)' previously defined here

FxMathFunctions.h には次のものがあります。

11: struct FxPoint2d;
12:
13: inline FxInt32 IMin(FxInt32 i1,FxInt32 i2)
14: {
15:    if (i2 < i1) i1 = i2;
16:    return i1;
17: }

FxInt32 は、次のように含めているヘッダーで定義されています。

typedef long                FxInt32;

FxInt32 が再定義されているか、関数全体が再定義されているかをエラーで判断できません。

これを解決するにはどうすればよいですか?

更新上記の行番号を追加しました。

4

3 に答える 3

1

関数全体が2回定義されていると言っています。

私の精神的なデバッグ能力は、あなたが何らかの方法でそのヘッダーを再帰的にインクルードしていることを示しており、そのヘッダーにはこれに対する適切なガードがありません。したがって、インライン関数は 2 回定義されます。

于 2010-06-23T04:48:43.743 に答える
0

関数定義を .cpp ファイルに移動し、プロトタイプだけを .h ファイルに入れます。最適化についてコンパイラに心配させる

于 2010-06-23T04:31:34.910 に答える
0

FxMathFunctions.h の 13 行目と 15 行目に何があるかを知らずに言うのは難しいです。そうは言っても、C++ には組み込みのstd::minand std::maxin<algorithm>があり、それらはすべての同等の型で機能することに注意してください。

于 2010-06-23T04:33:32.617 に答える