应为vc++中的常量表达式

expected constant expression in vc++

本文关键字:常量 表达式 vc++ 应为      更新时间:2023-10-16

为什么不在visual studio 2008中使用VC++15编译此代码?

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

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

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

为什么这段代码不在visualstudio2008中用VC++15编译?

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

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

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

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

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

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

使用适当的算术来计算访问时的索引。

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

有关更多信息,请参阅

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