定数文字列の定数配列の初期化に問題があります。
Week.hから(関連部分のみを表示):
class Week {
private:
static const char *const *days = { "mon", "tue", "wed", "thur",
"fri", "sat", "Sun" };
};
コンパイルすると、「スカラー初期化子の余分な要素」というエラーが表示されます。 const char **とタイプしてみて、2番目のconstの配置を台無しにしたと思いましたが、同じエラーが発生しました。私は何を間違えていますか?
まず、ポインターではなく配列が必要です。
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"};
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