Como você pode definir const static std :: string no arquivo de cabeçalho?
Eu tenho uma classe que eu gostaria de armazenar uma estáticastd::string
que é verdadeiramente const ou efetivamente const através de um getter.
Eu tentei algumas abordagens diretas
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
Eu também tentei
3
protected:
static std::string foo;
public:
static std::string getFoo() { return foo; }
Essas abordagens falham por essas razões, respectivamente:
erro: inicialização em classe do membro de dados estáticosconst string MyClass::foo
de tipo não-literalclasse de armazenamento especificada parafoo
- não parece gostar de combinarextern
comconst
oustatic
muitos 'referência indefinida para' erros gerados por outras partes do meu código e até mesmo a linha de retorno da função getterO motivo Eu gostaria de ter a declaração dentro do cabeçalho em vez do arquivo de origem. Esta é uma classe que será estendida e todas as suas outras funções são virtuais puras, então atualmente não tenho outra razão senão essas variáveis para ter um arquivo de origem.
Então, como isso pode ser feito?