2013-12-23 2 views
0

Я пытаюсь скомпилировать программу на C++ в VS2010. Я использую приведенный ниже код, но получаю ошибку при компиляции.Невозможно объявить массив FilePointer

int c=1; 
FILE *f[c+2]; 

Ошибка говорит, что я не могу использовать c. Это должно быть постоянное значение, но мое требование состоит в том, что я не могу использовать константу. Пожалуйста, предложите.

Спасибо, Амит Агарвал

ответ

4

В C++ массив, размер которого не константное выражение пишется vector:

int c=1; 
vector<FILE*> f(c+2); 
+0

Спасибо @Cassey. Это сработало для меня :) –

2

Использование динамического распределения:

int c=1; 
FILE *f = new FILE[c+2]; 

Но, не забудьте освободить указатели, когда вы закончили использовать их:

delete []f; 

еще лучше, вы может использовать std::unique_ptr VS 2010 поддерживает его:

int c=1; 
std::unique_ptr<FILE[]> fp(new FILE[c+2]); 

Обязательно укажите #include<memory>, где объявляется std::unique_ptr.

Преимущество в том, что вам не нужно использовать delete [], чтобы освободить указатель. Компилятор заботится об управлении памятью.

+0

Спасибо Харипрасад за вашу помощь, но ни один из вышеперечисленного не работает для меня. Первый дал мне ошибку: ошибка: оператор не найден, который принимает правый оператор типа FILE * (или нет приемлемого преобразования) Второе решение тоже не работает. :( –

+0

Какой компилятор вы используете? – Hariprasad

+0

Я работаю над VS2010. Не уверен, что компилятор работает. Мой код отлично работает в другом программном обеспечении, где компилятор gcc. –

0

VS не поставляется с компилятором C99 и не поддерживает массивы переменной длины. Итак, размер массива должен быть константой.

int c=1; 
FILE *f[3]; 

Так как вам нужно выделить динамически, Вместо этого вы можете пойти с

int c=5; 
FILE *f = new FILE[c+2]; 
-1

You может достичь этого, как показано ниже:

#define MAX_FILES

FILE * f [MAX_FILES + 1];

Или вы идете с динамическим распределением с «новой»

+0

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

+0

Он этого не уточнил. Поэтому я представил этот вариант, а также упомянул о динамическом распределении. –

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