クラス (この場合はシェイプファクトリー) にプライベートな静的定数を設定したいと思います。
そういうものが欲しいです。
class A {
private:
static const string RECTANGLE = "rectangle";
}
残念ながら、C++ (g++) コンパイラから次のようなさまざまなエラーが発生します。
ISO C++ はメンバー 'RECTANGLE' の初期化を禁止します
非整数型 'std::string' の静的データ メンバーのクラス内初期化が無効です
エラー: 'RECTANGLE' を静的にする
これは、この種のメンバー設計が標準に準拠していないことを示しています。#define ディレクティブを使用せずに、プライベート リテラル定数 (またはパブリック) を作成するにはどうすればよいでしょうか (データのグローバル性の醜さを避けたいのです)。
ベストアンサー1
C++17以降では、インライン変数を使用できます。
// In a header file (if it is in a header file in your case)
class A {
private:
inline static const string RECTANGLE = "rectangle";
};
C++17 より前では、静的メンバーをクラス定義の外部で定義し、そこで初期化子を提供する必要があります。
// In a header file (if it is in a header file in your case)
class A {
private:
static const string RECTANGLE;
};
// In one of the implementation files
const string A::RECTANGLE = "rectangle";
最初に使用しようとした構文 (クラス定義内の初期化子) は、整数型と列挙型でのみ許可されます。