10

私の理解では、このエラーは、同じファイルを含む複数のファイルがある場合にヘッダーガードを適切に使用していないことが原因です。私の場合、これはエラーの原因となっているインクルードツリーです。

File A includes Z, which contains the functions I need. File B includes A, and file C includes A.

'がない場合#pragma once、プログラムは同じエラーのバリエーションを多数提供します。

blahblah.obj: error LNK2005: class some::namespace::ObjectType Object already 
    defined in dialogDlg.obj

私が説明したインクルードツリーを考えると、これを正しくコンパイルするための適切な方法は何ですか?

ファイルZで使用#pragma onceしてみましたが、うまくいきませんでした。また、ファイルAで#pragmaを1回試しましたが、これも機能しませんでした。最後に、AとZの両方で試してみましたが、機能しませんでした。

4

1 に答える 1

13

ヘッダーファイルで変数を定義しようとしているようです。そのヘッダーファイルが複数のソースファイルに含まれている場合は、各ソースファイルで定義されるため、エラーが発生します。

代わりに、として宣言externしてから、ソースファイルの1つで定義してください。

したがって、ヘッダーファイルでは次のようになります。

extern ObjectType Object;

そしてソースファイルで:

ObjectType Object;
于 2013-03-04T14:31:30.013 に答える