预期在vc ++中的常量表达式

时间:2014-04-18 08:25:16

标签: c++ visual-c++ visual-studio-2008

为什么在Visual Studio 2008中使用VC ++ 15编译此代码?

错误:C2057:预期的常量表达式,C2466:无法分配常量大小为0的数组。

void foo(int a, int b)
{
double arr[a][b]
...
}

虽然它在GCC 4.4中运行良好。我需要编译器之间的兼容性。

2 个答案:

答案 0 :(得分:2)

  

为什么在Visual Studio 2008中这段代码不能用VC ++ 15编译?

因为C风格的可变长度数组不是C ++语言的一部分。 GCC将其作为非标准扩展提供;有些编译器没有。

  

我需要编译器之间的兼容性。

然后你需要一个动态数组,例如:

std::vector< std::vector<double> > arr(a, std::vector<double>(b));

或者,如果您希望所有元素都是连续的,就像它们在二维数组中一样:

std::vector<double> arr(a*b);

使用适当的算法在访问时计算索引。

答案 1 :(得分:1)

编译时编译器需要具有类的确切大小,您必须使用new运算符来动态分配内存,向量是此类操作的最佳选择。

有关更多信息,请参阅

http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html http://www.boost.org/doc/libs/1_39_0/libs/multi_array/doc/user.html