• ベストアンサー

1 つ以上の複数回定義されているシンボルが見つかりました

こんにちは。 VC++を使ってプログラムを作っているのですが、コンパイルは通るのですが、リンク時に以下のエラーメッセージが出ます。どなたか解決方法を教えてください。 (仮にプロジェクト名をPROJECTとします。) リンク中... PROJECT.obj : error LNK2005: "struct AA pAA" (?pAA@@3UAA@@A) はすでに PROJECT.obj で定義されています Debug/PROJECT.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました link.exe の実行エラー 開発ツール:VC++6.0 MFCを使用しています。 OS:Windows XP SP2 上記現象の発生した契機は、ヘッダファイル内で定義している構造体に構造体変数を加えたことによります。 【発生前】 ・ヘッダ内 struct AA { }; ・ソース内 AA pAA; 【発生後】 ・ヘッダ内 struct AA { }pAA; ・ソース (ソース内での構造体変数の宣言を削除) 以上で、どなたか心当たりのある方はご教授をお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

struct AAを定義したヘッダファイルを複数個所からインクルードしていませんか? ヘッダ内で構造体変数(pAA)を定義しているので、インクルードした回数だけ、同名の変数ができてしまいます。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 お礼が遅くなり、申し訳ありません。 調べて見ましたところ、おっしゃる通り複数ファイルから同一ヘッダをインクルードしてしました… ありがとうございました!!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • SSBBGLUV
  • ベストアンサー率47% (11/23)
回答No.3

ヘッダ側で extern struct AA pAA; と宣言だけ行い、ソースファイルのどれか一つで struct AA pAA; と実体を定義してください。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 お礼が遅くなり、申し訳ありません。 色々と勉強になります~ どうもありがとうございました!

すると、全ての回答が全文表示されます。
  • ID-PeaceC
  • ベストアンサー率46% (97/209)
回答No.2

No.1さんに補足です。 ヘッダファイルの先頭と最後に、複数インクルード防止マクロを定義しておきましょう。 ※ヘッダファイルの先頭 #if !defined(HOGEHOGE_XXXXXXX) #define HOGEHOGE_XXXXXXX ※ヘッダファイルの最後 #endif ※HOGEHOGE_XXXXXXX は、任意でユニークな文字列。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 お礼が遅くなり、申し訳ありません。 おお~そういうばそのような方法もありましたね! すっかり忘れていました・・・ どうもありがとうございました!

すると、全ての回答が全文表示されます。