これはどういうことなのでしょうか?
1>AI1.obj : error LNK2005: "int gastobb" (?gastobb@@3HA) は既に background.obj で定義されています。
1>fps.obj : error LNK2005: "int gastobb" (?gastobb@@3HA) は既に background.obj で定義されています。
1>initial.obj : error LNK2005: "int gastobb" (?gastobb@@3HA) は既に background.obj で定義されています。
1>load.obj : error LNK2005: "int gastobb" (?gastobb@@3HA) は既に background.obj で定義されています。
1>main.obj : error LNK2005: "int gastobb" (?gastobb@@3HA) は既に background.obj で定義されています。
1>othernumber.obj : error LNK2005: "int gastobb" (?gastobb@@3HA) は既に background.obj で定義されています。
1>player.obj : error LNK2005: "int gastobb" (?gastobb@@3HA) は既に background.obj で定義されています。
1>C:\Users\Huy\documents\visual studio 2010\Projects\overarmored\Debug\overarmored.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========
gastobbをほかの文字に変えても同じ結果になってしまいます。
エラーがよくわかりません
Re: エラーがよくわかりません
あるヘッダファイルに int gastobb; と書いて、そのヘッダファイルを
多くの .cpp ファイルでインクルードしたため、gastobb の実体が
複数の .obj の中にできてしまって、それらをリンクしようとしたら、
多重定義になったということでしょう。
ヘッダファイルには、extern int gastobb; と書き、.cpp ファイルの
どれか一つだけに、int gastobb; と書きましょう。
多くの .cpp ファイルでインクルードしたため、gastobb の実体が
複数の .obj の中にできてしまって、それらをリンクしようとしたら、
多重定義になったということでしょう。
ヘッダファイルには、extern int gastobb; と書き、.cpp ファイルの
どれか一つだけに、int gastobb; と書きましょう。
Re: エラーがよくわかりません
>#defineガード
defineガードでも多重定義は行われるのでexternは必要です。
グローバル変数を利用する設計はC言語的にあまり良いとはいえません。
カプセル化を行ったほうが良いと思います。
defineガードでも多重定義は行われるのでexternは必要です。
グローバル変数を利用する設計はC言語的にあまり良いとはいえません。
カプセル化を行ったほうが良いと思います。