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

0

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

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]" не может иметь инициализатор в классе

Это ошибка, или я делаю что-то неправильно?

  • 0
    Вам нужно добавить constexpr для того, чтобы этот код был действительным.
  • 0
    Стандарт C ++ допускает инициализацию внутри класса только статических интегральных или перечислимых типов.
Показать ещё 2 комментария
Теги:
arrays
visual-studio-2013
intellisense

1 ответ

1
Лучший ответ

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

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

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

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

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

Итак, чтобы получить действительный код, вы должны написать

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню