Я создаю простую терминальную фэнтезийную игру с использованием C ++. Кажется, я столкнулся с ошибкой «ошибка: объекты« переменного размера »не могут быть инициализированы». Вот код:
string useItem(int item)
{
string items[item] = {"HP Potion","Attack Potion","Defense Potion","Revive","Paralize Cure"};
}
Я хочу иметь возможность использовать эту функцию для доступа и возврата элемента. Как я могу исправить эту ошибку. Я использую Code :: Blocks с компилятором mingw.
Здесь есть пара проблем: один массив переменной длины является функцией C99 и не является частью ISO C ++, но несколько компиляторов поддерживают эту функцию как расширение в том числе gcc.
Во-вторых, C99 говорит, что массивы переменной длины не могут иметь инициализатор, из проект стандарта C99 раздел 6.7.8
инициализация:
Тип объекта, который должен быть инициализирован, должен быть массивом неизвестных
размер или тип объекта, который не является типом массива переменной длины.
и альтернативой является использование:
string items[] = { ... } ;
размер массива неизвестного размера будет определяться количеством элементов в инициализаторе.
В качестве альтернативы можно использовать идиоматический способ C ++ иметь массив переменного размера. станд :: вектор.