在C ++中初始化const字符串的静态const数组

时间:2011-06-30 15:00:12

标签: c++ compiler-errors initialization const

我无法初始化常量字符串的常量数组。

从week.h(仅显示相关部分):

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

当我编译时,我得到错误“标量初始化器中的多余元素”。我试着把它变成const char **,认为我弄乱了第二个const位置,但是我得到了同样的错误。我做错了什么?

2 个答案:

答案 0 :(得分:51)

首先,你需要一个数组,而不是一个指针。

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

答案 1 :(得分:16)

对于 C ++ 11 ,您 可以在 .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