2013-11-12 3 views
0

Я довольно новичок в программировании, и у меня возникли проблемы с инициализацией массива с помощью const int. до сих пор для кода у меня есть это:Невозможно инициализировать массив с постоянной переменной ... ПОЧЕМУ?

int temp = 0; 
temp += valuesVec.size(); 
int SIZE = temp; 
int valuesArray[SIZE]; 

Я пытаюсь сделать массив с таким же числом элементов, как вектор, читать файл и сохранить все значения. ошибки это дает мне это:

Error 1 Expected constant expression. 
Error 2 error C2466: cannot allocate an array of constant size 0  
Error 3 error C2133: 'valuesArray' : unknown size 
Error 4 IntelliSense: expression must have a constant value 

все ошибки приводят обратно: int valuesArray[SIZE]; печати SIZE дал мне значение 1118.

Я знаю, что я, вероятно, делать что-то глупое и, возможно, забыл некоторые фундаментальные правила, но ... Пока кто-то не укажет это, я буду изливать свою книгу.

+6

Что для вас значит «Постоянная переменная»? –

+0

Не то же самое, что и для компилятора. :) –

+0

Используйте std :: vector. Используйте массив, только если у вас есть веская причина. –

ответ

2

Размер статического массива может быть задан с ненулевым постоянным значением. Если во время компиляции размер неизвестен, вы должны использовать динамический массив.

int * valuesArray = new int [SIZE]; 
... 
delete[] valuesArray; 

Пожалуйста, убедитесь, что вы используете правильный оператор удаления [].

Или лучше использовать std::vector

+0

Удалите элемент 'new' /' delete', он делает этот ответ * хуже *, не лучше. Он подвержен ошибкам, сложный и не нужен. И это, безусловно, не поможет OP. –

+0

В соответствии с авторским мастерством был дан ответ. STL может запутать его до сих пор. –

+0

'новый' /' delete' is * больше * смущает. Несмотря на то, что люди думают, стандартная библиотека является элементарной C++. 'new' /' delete' - нет. –

0

SIZE не является константой времени компиляции (по крайней мере, если valuesVec не есть), так что вы не можете статически объявить массив с SIZE как его размер.

Вы можете попробовать вручную выделить его:

int* valuesArray = new int[SIZE]; 

, если вы помните, чтобы delete[] его. Или вы можете просто сделать другой вектор:

std::vector<int> valuesArray(SIZE); 
+0

Удалите часть 'new' /' delete', она делает этот ответ * хуже *, не лучше. Он подвержен ошибкам, сложный и не нужен. И это, безусловно, не поможет OP. –

Смежные вопросы