:Foo.cppで静的定数クラスのメンバ宣言
class Foo
{
public:
Foo();
static const unsigned int FOOBAR = 10;
static const unsigned int BARFOO = 20;
private:
unsigned int m_FooBar;
bool m_Bar;
void Bar();
};
:
Foo::Foo()
: m_FooBar(FOOBAR), // this works
m_Bar(false)
{
}
void Foo::Bar()
{
//m_FooBar = m_Bar ? FOOBAR : BARFOO; // linker fails *1
m_FooBar = FOOBAR; // ok
}
私はGCC 4.5.3でコンパイルしています。 line * 1のコメントを外したときにリンカーが失敗する理由はありますか?
Foo.o: In function 'Foo::Bar' (name unmangled):
Foo.cpp: undefined reference to `Foo::FOOBAR'
Foo.cpp: undefined reference to `Foo::BARFOO'
VC2005、2008、2010およびCB2010で試してみました。彼らはすべてコンパイルされ、うまくリンクされています。 GCCはなぜこのケースで失敗するのですか?
answer hereが与えられているので、他の一般的なコンパイラがGCCのように失敗するのはなぜですか? GCCや他の一般的なコンパイラのバグでなければならない。それとももっと合理的な説明がありますか?クラス宣言の外
static const unsigned int FOOBAR = 10;
static const unsigned int BARFOO = 20;
:
Hmm ... VS2010でうまくコンパイルされます。 – Mysticial
CB2010とVS2005のコンパイルとリンク –
@神秘的な質問はgccについてです。私はリンカのエラーを確認することができます。 –