ページ 11

エラーがよくわかりません

Posted: 2012年11月25日(日) 14:32
by アップルミスト
これはどういうことなのでしょうか?
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: エラーがよくわかりません

Posted: 2012年11月25日(日) 15:17
by かずま
あるヘッダファイルに int gastobb; と書いて、そのヘッダファイルを
多くの .cpp ファイルでインクルードしたため、gastobb の実体が
複数の .obj の中にできてしまって、それらをリンクしようとしたら、
多重定義になったということでしょう。

ヘッダファイルには、extern int gastobb; と書き、.cpp ファイルの
どれか一つだけに、int gastobb; と書きましょう。

Re: エラーがよくわかりません

Posted: 2012年11月25日(日) 16:26
by てんむすキツネ
かずま様が言われた方法意外にも
#defineガードという方法もあります。

Re: エラーがよくわかりません

Posted: 2012年11月25日(日) 16:55
by nil
>#defineガード
defineガードでも多重定義は行われるのでexternは必要です。
グローバル変数を利用する設計はC言語的にあまり良いとはいえません。
カプセル化を行ったほうが良いと思います。

Re: エラーがよくわかりません

Posted: 2012年11月28日(水) 16:48
by アップルミスト
見直したらexternを抜いてしまっていました。
ありがとうございました