en foo.h:estática constante de la declaración de miembro de la clase
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();
};
en 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
}
Estoy compilando con GCC 4.5.3. ¿Hay alguna razón por la cual el enlazador fallaría cuando la línea * 1 está descomentada?
Foo.o: In function 'Foo::Bar' (name unmangled):
Foo.cpp: undefined reference to `Foo::FOOBAR'
Foo.cpp: undefined reference to `Foo::BARFOO'
Probado con VC2005, 2008, 2010 y CB2010. Todos compilaron y vinculó bien. ¿Por qué GCC falla en este caso?
Dado el answer here, ¿por qué los otros compiladores populares no fallan como GCC? De una manera u otra, tiene que ser un error, ya sea para GCC u otros compiladores populares. ¿O hay una explicación más razonable?
Hmm ... Se compila bien en VS2010. – Mysticial
Compila y enlaces en CB2010 y VS2005 también –
@Mysticial pregunta es sobre gcc sin embargo. y puedo confirmar el error del enlazador. –