C++ 智能感知:类型为“的成员”;常量字符*常量[]”;不能有类内初始值设定项

C++ 智能感知:类型为“的成员”;常量字符*常量[]”;不能有类内初始值设定项,c++,arrays,visual-studio-2013,intellisense,const-char,C++,Arrays,Visual Studio 2013,Intellisense,Const Char,考虑: class Note { public: // ... private: static const char* const NOTE_NAMES[12] = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" }; } 虽然编译很好,但IntelliSense给了我一个错误: IntelliSense:类型为“const char*const[12]”的成员不能具有

考虑:

class Note
{
public: 
    // ...
private:
    static const char* const NOTE_NAMES[12] =
            { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
}
虽然编译很好,但IntelliSense给了我一个错误:

IntelliSense:类型为“const char*const[12]”的成员不能具有类内初始值设定项


这是一个bug还是我做错了什么?< /P> < P>根据C++标准

如果非易失性常量静态数据成员为整数或 枚举类型,其在类定义中的声明可以指定 一种括号或相等的初始值设定项,其中每个初始值设定项子句 assignmentexpression是一个常量表达式

< >你的代码不符合C++标准。

另一方面

类中可以声明literal类型的静态数据成员 使用constexpr说明符定义;如有,其声明应 指定一个大括号或相等的初始值设定项,其中包含每个初始值设定项子句 这是一个赋值表达式,它是一个常量表达式

因此,要获得有效的代码,您应该编写

static constexpr char* const NOTE_NAMES[12] =
        { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };

您需要添加<代码> CONTXPRPR <代码>,以使此代码有效。C++标准只允许在类内初始化静态常数积分或枚举类型。对不起,重复。