ページ 11

[C++]名前空間内にある静的メンバ変数の宣言

Posted: 2017年5月10日(水) 14:17
by 悲しい
以前に作成したclassを新たに,名前空間に入れるために以下のようなコードを実装しました.

<.hpp>
namespace hoge{
[tab=30]class huga;
};

class hoge::huga{
private:
[tab=30]static int piyo0;
~ 以下略 -
};

<.cpp>
int hoge::huga::piyo0 = 0;

- 以下略 -

以上

すると, 'int hoge::huga::piyo0' is private'とerrorが発生してしまいます.
名前空間を実装する前は,問題なく動作していたため,名前空間内の静的メンバ変数の宣言に問題があると考えているのですが,どのように実装すればよいのでしょうか.
ご教示お願いします.

Re: [C++]名前空間内にある静的メンバ変数の宣言

Posted: 2017年5月10日(水) 19:30
by かずま
huga.hpp

コード:

namespace hoge{
	class huga;
};

class hoge::huga{
private:
	static int piyo0;
};
huga.cpp

コード:

#include "huga.hpp"

int hoge::huga::piyo0 = 0;
この huga.cpp を g++ -c huga.cpp や cl -c huga.cpp でコンパイルしても
私のところでは、エラーが出ません。
g++ は cygwin の 5.4.0。cl は Visual Studio 2013 のものです。

エラーの出る環境は何ですか? エラーの出るソースや、エラー
メッセージを(ファイル名や行番号を省略しないで)提示してください。

Re: [C++]名前空間内にある静的メンバ変数の宣言

Posted: 2017年5月10日(水) 22:11
by みけCAT
悲しい さんが書きました:すると, 'int hoge::huga::piyo0' is private'とerrorが発生してしまいます.
思いっきりprivateって書いてあるからprivateになるのは当たり前だと思うのですが…
悲しい さんが書きました:名前空間を実装する前は,問題なく動作していた
そのコードは提示できないですか?

Re: [C++]名前空間内にある静的メンバ変数の宣言

Posted: 2017年5月10日(水) 22:13
by みけCAT
問題なく動作していたコード、名前空間を導入したコードそれぞれについて、
最小限の・自己完結した・確認可能なサンプルコードを提示していただけるとありがたいです。