Подтвердить что ты не робот

Слишком много инициализаторов для '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

4b9b3361

Ответ 1

В С++ 11 допускаются инициализаторы членов класса, но в основном действуют так же, как инициализация в списке инициализации членов. Поэтому размер массива должен быть явно указан.

У Страуструпа есть короткое объяснение на его веб-сайте здесь.

Сообщение об ошибке означает, что вы предоставляете слишком много элементов для массива длиной 0, что соответствует int [] в этом контексте.

Ответ 2

В первом примере на самом деле происходит что-то (фактическое распределение памяти). Компьютер легко подсчитывает количество предоставленных ему предметов и использует это как емкость. Во втором использовании, как часть структуры, массив является просто частью шаблона структуры. Во втором случае размер должен быть явно указан и известен во время компиляции. Здесь нет автоматического подсчета. Он аналогичным образом выполняет декларации функций по сравнению с определениями, а также декларации переменных (указывает тип, но память нетронута) и их вызов/использование (где действует программа).

Ответ 3

Это два совершенно разных контекста:

Первое - это объявление переменной (с предложением инициализации).

Второе - это определение типа.