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

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;
}

A 回答 (1件)

グローバル変数の実体宣言をヘッダに書かなければいいのです。


ヘッダには以下のようにexternを付けて参照宣言だけしておきます。

extern int count;

test::countの実体はns.cpp内で宣言するのがいいでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/22 20:20

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