17

std::string私は、ゲッターを介して真に const または実質的に const である静的を格納したいクラスを持っています。

私はいくつかの直接的なアプローチを試みました
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

私も試してみました

3.

protected:
    static std::string foo;
public:
    static std::string getFoo() { return foo; }

これらのアプローチは、それぞれ次の理由で失敗します。

  1. const string MyClass::fooエラー:非リテラル型の静的データ メンバーのクラス内初期化
  2. に指定されたストレージ クラス-- orと組み合わせるのがfoo好きではないようですexternconststatic
  3. コードの他の部分やゲッター関数の戻り行によって生成された多くの「未定義の参照」エラー

ソースファイルではなくヘッダー内に宣言したい理由。これは拡張されるクラスであり、他のすべての関数は純粋な仮想であるため、現在、これらの変数以外にソース ファイルを持つ理由はありません。

では、これを行うにはどうすればよいでしょうか。

4

2 に答える 2