プロが教えるわが家の防犯対策術!

こんにちは。

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;

・ソース
(ソース内での構造体変数の宣言を削除)

以上で、どなたか心当たりのある方はご教授をお願いいたします。

A 回答 (3件)

struct AAを定義したヘッダファイルを複数個所からインクルードしていませんか?


ヘッダ内で構造体変数(pAA)を定義しているので、インクルードした回数だけ、同名の変数ができてしまいます。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
お礼が遅くなり、申し訳ありません。

調べて見ましたところ、おっしゃる通り複数ファイルから同一ヘッダをインクルードしてしました…

ありがとうございました!!

お礼日時:2005/04/25 14:30

No.1さんに補足です。



ヘッダファイルの先頭と最後に、複数インクルード防止マクロを定義しておきましょう。

※ヘッダファイルの先頭
#if !defined(HOGEHOGE_XXXXXXX)
#define HOGEHOGE_XXXXXXX

※ヘッダファイルの最後
#endif

※HOGEHOGE_XXXXXXX は、任意でユニークな文字列。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
お礼が遅くなり、申し訳ありません。

おお~そういうばそのような方法もありましたね!
すっかり忘れていました・・・

どうもありがとうございました!

お礼日時:2005/04/25 14:32

ヘッダ側で


extern struct AA pAA;
と宣言だけ行い、ソースファイルのどれか一つで
struct AA pAA;
と実体を定義してください。
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。
お礼が遅くなり、申し訳ありません。

色々と勉強になります~
どうもありがとうございました!

お礼日時:2005/04/25 14:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A