staticなメンバ変数の初期化

Hoge.h

class Hoge {
public:
	static func();
private:
	static std::vector<int> m_vector;
	static std::bitset<16>  m_bitset;
	static int              m_array[16];
};

Hoge.cpp

Hoge::func()
{
	m_vector.clear();
	m_bitset.reset();
	m_array[0] = 0;
}

という風にしてしまうと、LNK2001の外部参照が未解決リンクエラーが出てしまいます。
staticなメンバ変数は、ヘッダ上では宣言しているだけなので、実体の確保はソース(cpp)側で行う必要があります。
Hoge.cppのfunc()の前に

std::vector<int>  Hoge::m_vector;
std::bitset<16>   Hoge::m_bitset;
int               Hoge::m_array[16];

を追記して、暗黙の初期化を行うようにすればリンクエラーは解消されます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です