слишком много инициализаторов для ‘int ‘ c ++

Первый:

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

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

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

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

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

Вероятно, причиной в struct компилятору необходимо указать размер явно.

C инициализировать массив внутри структуры (каламбур)

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

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

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

  • Заполнение в структурах в C
  • НЕ используя шаблон репозитория, используйте ORM as is (EF)
  • Давайте будем гением компьютера.