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" };