我正在尝试在Visual Studio 2015中运行我的代码,并且在下一个代码中剪切了expression must have a constant value
上的下一个错误double x1[dim];
。
double fitness(const double x[], const int &dim) {
double sum = 0.0;
double x1[dim];
...
return sum;
}
相同的代码在g++ 4.8
上运行时没有错误。那么我怎样才能在Visual Studio 2015下做同样的事情。
我的编译器或代码实现有问题吗?
答案 0 :(得分:3)
double x1[dim];
是一个VLA(可变长度数组)。它不是标准的C ++。
它适用于gcc
的原因是gcc
具有允许VLA的扩展名。 VS2015没有,所以这就是为什么它不能编译(它有自己的set扩展,但不是那个)。
最佳选择是std::vector
:
std::vector<double> x1(dim); //array of size dim
如果你不能使用它,你仍然可以使用手动动态数组(虽然不建议这样做):
double* x1 = new double[dim];
delete[] x1; //Don't forget to delete it when you are done
//Alternatively, create a class which wraps the dynamic array, so you can use RAII
答案 1 :(得分:1)
过去,当我想在MSVC上使用VLA时,解决方法是在不支持VLA的编译器上每当我想要或需要VLA功能时使用alloca()
。