Estoy sorprendido por el error de vinculador cuando se utiliza el siguiente código:"const int estática" provoca error al vincular (undefined-referencia)
// static_const.cpp -- complete code
#include <vector>
struct Elem {
static const int value = 0;
};
int main(int argc, char *argv[]) {
std::vector<Elem> v(1);
std::vector<Elem>::iterator it;
it = v.begin();
return it->value;
}
Sin embargo, esto no funciona cuando se enlaza - de alguna manera tiene que tener una símbolo para el "valor" de const estático.
$ g++ static_const.cpp
/tmp/ccZTyfe7.o: In function `main':
static_const.cpp:(.text+0x8e): undefined reference to `Elem::value'
collect2: ld returned 1 exit status
Por cierto, esto compila bien con -O1 o mejor; pero aún falla para casos más complicados. Estoy usando gcc versión 4.4.4 20100726 (Red Hat 4.4.4-13).
Alguna idea de lo que podría estar mal con mi código?
posible duplicado de [Símbolos indefinidos raros de constantes estáticas dentro de una estructura/clase] (http://stackoverflow.com/questions/4891067/weird-unfined-symbols-of-static-constants-inside-a-struct- clase) – karlphillip
¡Gracias por el útil enlace! También muestra una solución alternativa, 'struct Elem {enum {value = 0}; } ', que parece bastante atractivo. – hrr
posible duplicado de [C++ - definición de miembros enteros const enteros en la definición de clase] (http://stackoverflow.com/questions/3025997/c-defining-static-const-integer-members-in-class-definition) – ks1322