Слишком много инициализаторов для 'int [0]' С++
Во-первых:
int k[] ={1,2,3,4,5};
Во-вторых:
struct slk
{
int k[] ={1,2,3,4,5};
};
для этих двух операторов, почему первая передает компиляцию, а вторая дает мне
error: слишком много инициализаторов для 'int [0]'. компиляция прошла бы, если бы я установил k [5];
Что означает это сообщение об ошибке? Примечание: код протестирован в GNU GCC версии 4.7.2
Ответы
Ответ 1
В С++ 11 допускаются инициализаторы членов класса, но в основном действуют так же, как инициализация в списке инициализации членов. Поэтому размер массива должен быть явно указан.
У Страуструпа есть короткое объяснение на его веб-сайте здесь.
Сообщение об ошибке означает, что вы предоставляете слишком много элементов для массива длиной 0, что соответствует int []
в этом контексте.
Ответ 2
В первом примере на самом деле происходит что-то (фактическое распределение памяти). Компьютер легко подсчитывает количество предоставленных ему предметов и использует это как емкость. Во втором использовании, как часть структуры, массив является просто частью шаблона структуры. Во втором случае размер должен быть явно указан и известен во время компиляции. Здесь нет автоматического подсчета. Он аналогичным образом выполняет декларации функций по сравнению с определениями, а также декларации переменных (указывает тип, но память нетронута) и их вызов/использование (где действует программа).
Ответ 3
Это два совершенно разных контекста:
Первое - это объявление переменной (с предложением инициализации).
Второе - это определение типа.
Ответ 4
Вероятно, в struct
компилятору необходимо явно указать размер.
C инициализировать массив внутри структуры (каламбур)