在 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 在这种情况下会失败?
鉴于这里的答案,为什么其他流行的编译器不会像 GCC 一样失败?无论是对于 GCC 还是其他流行的编译器,它都必须是一个错误。还是有更合理的解释?