foo.h中:靜態常量類成員聲明
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.cpp中:
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編譯。有沒有任何理由說明爲什麼鏈路* 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那樣失敗?無論如何,它必須是一個bug,無論是GCC還是其他流行的編譯器。還是有更合理的解釋?
嗯...它在VS2010編譯得很好。 – Mysticial
編譯和鏈接CB2010和VS2005 –
@Mysticial問題是關於gcc,但。我可以確認鏈接器錯誤。 –