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 oustaticmuitos 'referência indefinida para' erros gerados por outras partes do meu código e até mesmo a linha de retorno da função getter

O 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?

questionAnswers(2)

yourAnswerToTheQuestion