Nic*_*ick 29 c++ compiler-errors initialization const
我在初始化常量字符串的常量数组时遇到问题.
从week.h(仅显示相关部分):
class Week {
private:
static const char *const *days = { "mon", "tue", "wed", "thur",
"fri", "sat", "sun" };
};
Run Code Online (Sandbox Code Playgroud)
当我编译时,我得到错误"标量初始化器中的多余元素".我试着把它变成const char**,认为我弄乱了第二个const位置,但是我得到了同样的错误.我究竟做错了什么?
Arm*_*yan 52
首先,您需要一个数组,而不是指针.
static const char * const days[] = {"mon", "tue", "wed", "thur",
"fri", "sat", "sun"};
Run Code Online (Sandbox Code Playgroud)
其次,您不能直接在类定义中初始化它.我喜欢这个类定义,只留下这个:
static const char * const days[]; //declaration
Run Code Online (Sandbox Code Playgroud)
然后,在.cpp文件中,编写定义
const char * const Week::days[] = {"mon", "tue", "wed", "thur",
"fri", "sat", "sun"};
Run Code Online (Sandbox Code Playgroud)
更新C++ 11 现在您可以直接在类定义中初始化成员:
const char * const days[] = {"mon", "tue", "wed", "thur",
"fri", "sat", "sun"};
Run Code Online (Sandbox Code Playgroud)
mar*_*rni 17
对于C++ 11,您可以在.h文件中的类声明中进行初始化.但是,您还需要在.cpp文件中包含constexpr .上述案例示例:
在你的week.h文件中,写下:
class Week {
public:
static const constexpr char* const days[] =
{ "mon", "tue", "wed", "thur","fri", "sat", "sun" };
};
Run Code Online (Sandbox Code Playgroud)
在你的week.cpp文件中,写一下:
constexpr const char* const Week::days[];
Run Code Online (Sandbox Code Playgroud)
确保启用C++ 11,例如编译
g ++ -std = c ++ 11 week.cpp