2

これが私のコードです:

ああ

class Foo
{
public:
    int bar;
};

Foo myFoo;

main.cpp

#include "A.h"
int main()
{
    myFoo.bar = 2;
    return 0;
}

Xcodeは私にエラーを与えます(言い換え):

duplicate symbol _myFoo in main.o & A.o

Foo myFooをAh ファイル内に保持したいと思います。

XCode がこのエラーをスローするのはなぜですか?どうすれば修正できますか?

4

3 に答える 3

6

ヘッダーでグローバル変数を定義すると、1 つの定義ルールが破られます。
ヘッダーを含める各 TU には、オブジェクトの独自のコピーがあります。

externキーワードを使用する必要があります:

  1. ヘッダーでオブジェクトを extern として宣言します。
  2. 1 つのソース ファイルのみを定義します。
  3. グローバル変数を使用する場所にヘッダーを含めます

ああ

extern Foo myFoo;

main.cpp

#include "A.h"

Foo myFoo;

XXXX.cpp

#include "A.h"
于 2013-01-18T15:40:35.303 に答える
3

Foo myFoo;宣言ではなく、定義です。宣言に使用extern Foo myFoo;し、定義を単一の実装ファイルに移動します。

于 2013-01-18T15:41:26.830 に答える
0

No Common Blocksビルド設定で No に設定されていることを確認してください。

于 2016-10-02T01:30:13.147 に答える