为什么Visual Studio 2008中的代码不能用VC++ 15编译?vC++中的预期常量表达式
错误:C2057:预期常量表达式,C2466:虽然它在GCC 4.4工作正常不能分配恒定大小0
void foo(int a, int b)
{
double arr[a][b]
...
}
的阵列。我需要编译器之间的兼容性。
为什么Visual Studio 2008中的代码不能用VC++ 15编译?vC++中的预期常量表达式
错误:C2057:预期常量表达式,C2466:虽然它在GCC 4.4工作正常不能分配恒定大小0
void foo(int a, int b)
{
double arr[a][b]
...
}
的阵列。我需要编译器之间的兼容性。
为什么Visual Studio 2008中的代码不能用VC++ 15编译?
由于C风格可变长度数组不是C++语言的一部分。 GCC提供它们作为非标准扩展;一些编译器不会。
我需要编译器之间的兼容性。
然后你需要一个动态数组,例如:
std::vector< std::vector<double> > arr(a, std::vector<double>(b));
或者,如果你希望所有的元素是连续的,因为他们将在一个2维数组:
std::vector<double> arr(a*b);
使用适当的算术来计算访问它时的索引。
编译时编译器需要具有确切的类大小,您将不得不使用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