【问题标题】:IntelliSense: a member of type "const char *const []" cannot have an in-class initializer [duplicate]IntelliSense:“const char *const []”类型的成员不能具有类内初始化程序[重复]
【发布时间】:2014-06-18 06:29:19
【问题描述】:

考虑:

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]”类型的成员不能有类内初始化程序

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

【问题讨论】:

  • 您需要添加constexpr 才能使此代码有效。
  • C++ 标准只允许在类中初始化静态常量整数或枚举类型。
  • 抱歉重复了。
  • 没什么可遗憾的:)

标签: c++ arrays visual-studio-2013 intellisense const-char


【解决方案1】:

根据 C++ 标准

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

所以你的代码不满足 C++ 标准。

另一方面

literal类型的静态数据成员可以在类中声明 使用 constexpr 说明符 进行定义;如果是,其声明应 指定一个大括号或相等初始化器,其中每个初始化器子句 即赋值表达式是常量表达式

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多