相同的代码用g ++编译,但不在VS

时间:2016-09-25 11:14:05

标签: c++

我正在尝试在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下做同样的事情。

我的编译器或代码实现有问题吗?

2 个答案:

答案 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()