我正在尝试在VS2010中编译C ++程序。我正在使用下面的代码,但在编译时遇到错误。
int c=1;
FILE *f[c+2];
错误说我不能在那里使用c
。它必须是恒定的价值,但我的要求是我不能在那里使用常数。请建议。
谢谢, Amit Agarwal
答案 0 :(得分:4)
在C ++中,大小不是常量表达式的数组拼写为vector
:
int c=1;
vector<FILE*> f(c+2);
答案 1 :(得分: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 []
来释放指针。编译器负责内存管理。
答案 2 :(得分:0)
VS没有C99编译器,并且不支持可变长度数组。 因此,数组维度应该是常量。
int c=1;
FILE *f[3];
由于您需要动态分配,您可以使用
int c=5;
FILE *f = new FILE[c+2];
答案 3 :(得分:-1)
您可以通过以下方式实现此目的:
#define MAX_FILES
FILE * f [MAX_FILES + 1];
或者您使用'new'进行动态分配