Я пытаюсь скомпилировать программу C++ в VS2010. Я использую приведенный ниже код, но получаю ошибку при компиляции.
int c=1;
FILE *f[c+2];
Ошибка говорит, что я не могу использовать c
. Это должно быть постоянное значение, но мое требование состоит в том, что я не могу использовать константу. Пожалуйста, предложите.
Спасибо, Амит Агарвал
В C++ массив, размер которого не является постоянным выражением, задается vector
:
int c=1;
vector<FILE*> f(c+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 []
чтобы освободить указатель. Компилятор заботится об управлении памятью.
VS не поставляется с компилятором C99 и не поддерживает массивы переменной длины. Таким образом, размер массива должен быть константой.
int c=1;
FILE *f[3];
Поскольку вам нужно выделять динамически, вместо этого вы можете пойти с
int c=5;
FILE *f = new FILE[c+2];
Вы можете достичь этого, как показано ниже:
#define MAX_FILES
FILE * f [MAX_FILES + 1];
Или вы идете с динамическим распределением с помощью 'new'