【问题标题】:Why is there a compiler error, when declaring an array with size as integer variable?为什么在将具有大小的数组声明为整数变量时会出现编译器错误?
【发布时间】:2013-03-06 11:23:06
【问题描述】:
在 Visual Studio 中,我遇到了以前在 Dev-C++ 中没有的错误:
int project = (rand() % 5) + 1 ;
int P[project][3];
编译:
错误 C2057:预期的常量表达式
错误 C2466:无法分配常量大小为 0 的数组
错误 C2133:“P”:未知大小
你能帮助理解这个错误吗?
【问题讨论】:
标签:
c++
arrays
visual-studio-2008
compiler-errors
dev-c++
【解决方案1】:
在 C++ 中,您只能创建大小为编译时间常数的数组。
数组P 的大小需要在编译时知道,并且它应该是一个常量,编译器会通过诊断消息警告您。
为什么不同编译器的结果不同?
大多数编译器允许您通过编译器扩展创建可变长度数组,但这是非标准批准的,这样的使用将使您的程序在不同的编译器实现之间不可移植。这就是你所经历的。
【解决方案2】:
在这种情况下,您需要动态分配内存。所以你不能说int P[someVariable]。你需要使用int *mem = new int[someVariable]
看看this link.
【解决方案3】:
可变长度数组的标准 C++ 类是std::vector。在这种情况下,你会得到std::vector<int> P[3]; P[0].resize(project); P[1].resize(project); P[2].resize(project);