¿Cómo se puede definir const static std :: string en el archivo de encabezado?
Tengo una clase que me gustaría almacenar una estáticastd::string
eso es realmente constante o eficazmente a través de un captador.
He intentado un par de enfoques directos
1.
const static std::string foo = "bar";
2.
const extern std::string foo; //defined at the bottom of the header like so
...//remaining code in header
}; //close header class declaration
std::string MyClass::foo = "bar"
/#endif // MYCLASS_H
También he intentado
3.
protected:
static std::string foo;
public:
static std::string getFoo() { return foo; }
Estos enfoques fallan por estas razones respectivamente:
error: inicialización en clase de miembro de datos estáticosconst string MyClass::foo
de tipo no literalclase de almacenamiento especificada parafoo
- No parece que le guste combinarextern
conconst
ostatic
muchos errores de 'referencia indefinida a' generados por otras partes de mi código e incluso la línea de retorno de la función getterLa razón Me gustaría tener la declaración dentro del encabezado en lugar del archivo fuente. Esta es una clase que se ampliará y todas sus otras funciones son puramente virtuales, por lo que actualmente no tengo otra razón que estas variables para tener un archivo fuente.
Entonces, ¿cómo se puede hacer esto?