IntelliSense: член типа "const char *const []" не может иметь инициализатор в классе

Рассматривать:

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 ответ

Решение

Согласно стандарту C++

Если энергонезависимый константный статический член данных имеет целочисленный тип или тип перечисления, его объявление в определении класса может указывать инициализатор скобок или равных, в котором каждое предложение initializer, являющееся выражением assignmentexpression, является константным выражением

Таким образом, ваш код не соответствует стандарту C++.

С другой стороны

Статический член данных литерального типа может быть объявлен в определении класса с помощью спецификатора constexpr; если это так, его объявление должно указывать скобку-или-равный-инициализатор, в котором каждое предложение-инициализатор, являющееся выражением присваивания, является константным выражением

Таким образом, чтобы получить правильный код, вы должны написать

static constexpr char* const NOTE_NAMES[12] =
        { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
Другие вопросы по тегам