3

分離された.cppファイルからグローバル変数を使用しようとしています。私はinit.hファイルを次のように持っています:

//init.h
#ifndef init
#define init
int a = 3;
#endif

私はinit.cppファイルを次のように持っています: //init.cpp #include init.h

そして最後に私のmain.cppファイルは次のとおりです。

//main.cpp
#include "init.h"
int main(void)
{
    while(1)
    {
    }
}

この後、エラーが発生します。

1>init.obj : error LNK2005: "int a" (?a@@3HA) already defined in main.obj
1> ..deneme.exe : fatal error LNK1169: one or more multiply defined symbols found

なぜ私の#infdefコントロールはこの問題を解決しないのですか?私も使っ#pragma onceてみましたが、同じエラーが発生しました。私のコードの何が問題になっていますか?

4

1 に答える 1

9

extern変数をとしてマークし、実装ファイルで1回だけ定義する必要があります。

コードが現在のように、1つの定義規則に違反しています。この場合、インクルードガードは役に立ちません。これは、そのヘッダーを含むすべての変換ユニットが変数を再定義するためです。

実際に必要なもの:

//init.h
#ifndef init
#define init
extern int a;
#endif

と定義:

//init.cpp
#include "init.h"
int a = 3;

また、グローバルを使用する前によく考えてください。あなたが実際に達成しようとしていることは何ですか?

于 2012-04-13T12:38:26.453 に答える