Невозможно объявить массив FilePointer

0

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

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

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

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

Теги:
arrays
pointers
visual-studio-2010

4 ответа

4
Лучший ответ

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

int c=1;
vector<FILE*> f(c+2);
  • 0
    Спасибо @Кэсси. У меня это сработало :)
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
    Какой компилятор вы используете?
Показать ещё 2 комментария
0

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

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

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

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

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

#define MAX_FILES

FILE * f [MAX_FILES + 1];

Или вы идете с динамическим распределением с помощью 'new'

  • 0
    Его требования заключаются в том, что ему нужно, чтобы MAX_FILES был динамическим параметром времени выполнения, а не постоянной времени компиляции.
  • 0
    Он не уточнил это. Так что я предоставил это, а также упомянул о динамическом распределении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню