2016-03-22 2 views
0

Как инициализировать элемент-член по умолчанию в C++ 11? Кажется, что я должен предоставить оценку.В инициализаторе класса по умолчанию для элемента массива C++ 11

class Example { 
    const char* num2letter[10]{" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; 
}; 

Компилирует в порядке. Но если я опускаем обязан тогда я получил ошибку компилятора:

error: too many initializers for 'const char* [0]' const char* num2letter[]{" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

Как прийти компилятор не может вывести Связанный, как правило, он может для локального определения массива с помощью агрегатной инициализации?

+0

дубликат (HTTP : //stackoverflow.com/questions/29593207/what-is-the-reason-for-not-being-able-to-deduce-array-size-from-initializer-stri) –

ответ

1

Инициализатор элемента по умолчанию - это по умолчанию. Он всегда допускает возможность того, что конструктор предоставит другое значение. num2letter может быть инициализирован из одного из конструкторов Example, после чего инициализатор по умолчанию даже не будет использоваться ... поэтому тип должен быть явно указан. Объявление должно быть действительным с нашим без инициализатора.

Это по той же причине, что вы не можете сделать что-то вроде: [? Что является причиной не в состоянии вывести размер массива из инициализатора-строки в переменной члена]

class Example { 
    auto i = 4; 
}; 
Смежные вопросы