const std::string 型の静的データ メンバーを定義するにはどうすればよいですか? 質問する

const std::string 型の静的データ メンバーを定義するにはどうすればよいですか? 質問する

クラス (この場合はシェイプファクトリー) にプライベートな静的定数を設定したいと思います。

そういうものが欲しいです。

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";

最初に使用しようとした構文 (クラス定義内の初期化子) は、整数型と列挙型でのみ許可されます。

おすすめ記事