IntelliSense:类型" const char * const []"的成员不能有一个类内初始化程序

时间:2014-06-18 06:29:20

标签: 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]”类型的成员不能拥有类内初始值设定项

这是一个错误还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

根据C ++标准

  

如果非易失性const静态数据成员是整数或   枚举类型,它在类定义中的声明可以指定   一个括号或等于初始化器,其中每个初始化器子句都是   assignmentexpression是一个常量表达式

所以你的代码不符合C ++标准。

另一方面

  

可以在类中声明 literal 类型的静态数据成员    constexpr说明符的定义;如果是的话,其声明应   指定一个brace-or-equal-initializer,其中包含每个initializer子句   这是一个赋值表达式是一个常量表达式

所以要获得有效的代码,你应该写

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