奇妙な問題に遭遇しました。この例を考えると:
class Foo
{
static const int Bar = 5;
public:
Foo()
{
_map[Bar] = "some characters";
}
~Foo() {}
private:
std::map<int, std::string> _map;
};
int main()
{
Foo a;
return (0);
}
このエラーが発生します (g++ 4.7.2 でコンパイル):
/tmp/ccLy806T.o: In function `Foo::Foo()':
Main.cpp:(.text._ZN3FooC2Ev[_ZN3FooC5Ev]+0x1e): undefined reference to `Foo::Bar'
Bar で static_cast を作成すると、次のように動作します。
Foo()
{
int i = Bar; //works
_map[static_cast<int>(Bar)] = "some characters"; //works
}
このエラーBar
は、コンストラクターでマップの添字として使用する場合にのみ表示されます。Foo_map[Bar] = "some characters";
クラスの他の関数に記述しても、エラーは発生しません。
それは私にとって本当に奇妙ですが、ここの誰かが答えを持っていることを期待しています.
それで、私は何を間違っていますか?