in foo.h:statica costante dichiarazione di membro della classe
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
}
Sto compilando con GCC 4.5.3. C'è qualche ragione per cui il linker fallirebbe quando la riga * 1 non è commentata?
Foo.o: In function 'Foo::Bar' (name unmangled):
Foo.cpp: undefined reference to `Foo::FOOBAR'
Foo.cpp: undefined reference to `Foo::BARFOO'
provato con VC2005, 2008, 2010 e CB2010. Hanno tutti compilato e collegato bene. Perché GCC fallisce in questo caso?
Dato il answer here, perché gli altri compilatori popolari non funzionano come GCC? In un modo o nell'altro, deve essere un bug, sia per GCC che per gli altri popolari compilatori. O c'è una spiegazione più ragionevole?
Hmm ... Compone bene in VS2010. – Mysticial
Compilate e collegamenti anche in CB2010 e VS2005 –
@Misticial domanda riguarda comunque gcc. e posso confermare l'errore del linker. –