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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アップルミスト
記事: 21
登録日時: 7年前

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

#1

投稿記事 by アップルミスト » 7年前

これはどういうことなのでしょうか?
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: エラーがよくわかりません

#2

投稿記事 by かずま » 7年前

あるヘッダファイルに int gastobb; と書いて、そのヘッダファイルを
多くの .cpp ファイルでインクルードしたため、gastobb の実体が
複数の .obj の中にできてしまって、それらをリンクしようとしたら、
多重定義になったということでしょう。

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

アバター
てんむすキツネ
記事: 88
登録日時: 8年前
住所: 岡山

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

#3

投稿記事 by てんむすキツネ » 7年前

かずま様が言われた方法意外にも
#defineガードという方法もあります。
MLP!MLP!

nil
記事: 428
登録日時: 8年前

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

#4

投稿記事 by nil » 7年前

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

アップルミスト
記事: 21
登録日時: 7年前

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

#5

投稿記事 by アップルミスト » 6年前

見直したらexternを抜いてしまっていました。
ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る