in foo.h:Statische Konstante Klasse Memberdeklaration
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();
};
in 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
}
ich mit GCC 4.5.3 bin kompilieren. Gibt es einen Grund, warum der Linker fehlschlägt, wenn Zeile * 1 unkommentiert ist?
Foo.o: In function 'Foo::Bar' (name unmangled):
Foo.cpp: undefined reference to `Foo::FOOBAR'
Foo.cpp: undefined reference to `Foo::BARFOO'
Mit VC2005, 2008, 2010 und CB2010 versucht. Sie alle zusammengestellt und gut verbunden. Warum scheitert GCC in diesem Fall?
Angesichts der answer here, warum nicht die anderen populären Compiler wie GCC fehlschlagen? So oder so, es muss ein Bug sein, entweder für GCC oder die anderen populären Compiler. Oder gibt es eine vernünftigere Erklärung?
Hmm ... Es kompiliert in VS2010 gut. – Mysticial
Kompiliert und verbindet in CB2010 und VS2005 zu –
@Mysticial Frage ist über GCC obwohl. und ich kann den Linker-Fehler bestätigen. –