- 締切済み
名前空間でビルドエラー(LNK2005)
C++の名前空間について勉強しています。 ソースを組んでビルドしようとしたところ、以下のようなエラーが表示されました。 > error LNK2005 "int test::count" は既に main.obj で定義されています。 > fatal error LNK1169: 1つ以上の複数回定義されているシンボルが見つかりました。 変数が多重定義(?)されているというエラーであることはわかるのですが、 その対処法が分からず困っています・・・。 わかる方がいればアドバイスください。 よろしくお願いします。 --------------------------------------- ○main.cpp #include "ns.h" int main(){ test::hoge(); } ○ns.h #pragma once namespace test { int count; void hoge(); } ○ns.cpp #include <iostream> #include "ns.h" void test::hoge(){ std::cout << "hoge()が呼ばれた" << test::count++ << "回目" << std::endl; }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- D-Matsu
- ベストアンサー率45% (1080/2394)
回答No.1
グローバル変数の実体宣言をヘッダに書かなければいいのです。 ヘッダには以下のようにexternを付けて参照宣言だけしておきます。 extern int count; test::countの実体はns.cpp内で宣言するのがいいでしょう。
お礼
なるほど・・・。 その方法を使わせていただきたいと思います。 ありがとうございます。