• 締切済み

名前空間でビルドエラー(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; }

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

グローバル変数の実体宣言をヘッダに書かなければいいのです。 ヘッダには以下のようにexternを付けて参照宣言だけしておきます。 extern int count; test::countの実体はns.cpp内で宣言するのがいいでしょう。

cikora
質問者

お礼

なるほど・・・。 その方法を使わせていただきたいと思います。 ありがとうございます。

関連するQ&A