web-dev-qa-db-ja.com

C ++でのconst文字列の静的const配列の初期化

定数文字列の定数配列の初期化に問題があります。

Week.hから(関連部分のみを表示):

class Week {
  private:
    static const char *const *days = { "mon", "tue", "wed", "thur",
                                       "fri", "sat", "Sun" };
};

コンパイルすると、「スカラー初期化子の余分な要素」というエラーが表示されます。 const char **とタイプしてみて、2番目のconstの配置を台無しにしたと思いましたが、同じエラーが発生しました。私は何を間違えていますか?

29
Nick

まず、ポインターではなく配列が必要です。

static const char * const days[] = {"mon", "tue", "wed", "thur",
                                       "fri", "sat", "Sun"};

第二に、クラス定義内で直接初期化することはできません。クラス定義の中に、これだけを残します:

static const char * const days[]; //declaration

次に、.cppファイルに定義を記述します

const char * const Week::days[] = {"mon", "tue", "wed", "thur",
                                       "fri", "sat", "Sun"};

C++ 11の更新 これで、クラス定義でメンバーを直接初期化できます。

const char * const days[] = {"mon", "tue", "wed", "thur",
                                       "fri", "sat", "Sun"};
51
Armen Tsirunyan

C++ 11の場合、canクラス宣言内で。hファイル。ただし、。cppファイルにもconstexprを含める必要があります。上記の場合の例:

Week.hファイルに次のように記述します。

class Week {
    public:        
       static const constexpr char* const days[] = 
           { "mon", "tue", "wed", "thur","fri", "sat", "Sun" };
};

Week.cppファイルで、どこかに書き込みます。

constexpr const char* const Week::days[];

必ずC++ 11を有効にしてください。でコンパイルする

g ++ -std = c ++ 11 week.cpp

16
marni