2017-02-10 10 views
-2

C++の初心者はこちらです。変数の多重定義

がfoo.h(の#includeすべての必要なライブラリ、すべてのプログラム変数と、すべての関数の宣言)

私は3枚に分割され、簡単なプログラムを書いていますfoo.cpp(の#include foo.hという、foo.hという関数の定義を含む)

main.cppに(の#includeがfoo.hというもちろんメイン関数を含む)

私はコマンドでコンパイルします。G ++ * CPP -o時間

私が手にエラーがある:

/tmp/cc0sNZgq.o:(.bss+0x0):variableNameに「複数の定義をfoo.hで宣言されたすべての変数に対して '

collect2は:エラー:ldは注意

1つの終了ステータスが返されました:私はすでに私が含まれるヘッダを持ってしようとしていた

がfoo.hヘッダファイルに警備員を含める入れ続きますmain.cppができるだけシンプルできれいに保たれるように、すべての変数と関数の宣言が必要です。

私はオンラインで見ており解決策を見つけることができませんでした。

+1

*宣言だけでなく、ヘッダーに変数の*定義*があります。つまり、2つのコンパイル済みファイルに定義が表示されます。 [externキーワードで読む](http://en.cppreference.com/w/cpp/language/storage_duration)、クラスの静的メンバーを変数にする。 – BoBTFish

+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

答えて

3

変数をヘッダーファイルに入れないでください。これは、ヘッダーを含む各.cppファイルが独自の変数のコピーを持つことを意味します。

複数の.cppでグローバル変数を共有する場合は、1つの.cppで宣言し、ヘッダーファイルにexternを使用する必要があります。しかし、絶対に必要でない限り、グローバル変数を使用しないことをお勧めします。

+0

ありがとうございます。どこに置くべきですか? ** foo.cpp **と** main.cpp **の両方にそれらが必要です。 – mdvlln

+0

これらを.cppのいずれかに入れ、他の用途はexternにします。 – Karthik

+0

'foo.h'と' foo.cpp'は一つのコンポーネントとしてまとまっているようですので、 'foo.h'に' extern'、 'foo.cpp'に定義を入れてください。それらが単一のコンポーネントでない場合、それらに異なる名前を付けてください! – BoBTFish