C++ 将大小为整数变量的数组声明为整数变量时,为什么会出现编译器错误?
在visual studio中,我遇到了一个以前在Dev-C++中没有的错误:C++ 将大小为整数变量的数组声明为整数变量时,为什么会出现编译器错误?,c++,arrays,visual-studio-2008,compiler-errors,dev-c++,C++,Arrays,Visual Studio 2008,Compiler Errors,Dev C++,在visual studio中,我遇到了一个以前在Dev-C++中没有的错误: int project = (rand() % 5) + 1 ; int P[project][3]; 汇编: 错误C2057:预期的常量表达式 错误C2466:无法分配常量大小为0的数组 错误C2133:“P”:未知大小 你能帮助理解这个错误吗可变长度数组的标准C++类是 STD::vector < /代码>。在这种情况下,您将得到std::vector P[3];P[0]。调整大小(项目);P[1].调整大小(
int project = (rand() % 5) + 1 ;
int P[project][3];
汇编:
错误C2057:预期的常量表达式错误C2466:无法分配常量大小为0的数组
错误C2133:“P”:未知大小
你能帮助理解这个错误吗在C++中,只能创建一个大小为编译时间常数的数组。 数组
P
的大小需要在编译时知道,并且它应该是一个常量,编译器会通过诊断消息向您发出警告
为什么在不同的编译器上有不同的结果?
大多数编译器允许您通过编译器扩展创建可变长度数组,但这是非标准批准的,这种使用将使您的程序无法在不同的编译器实现之间移植。这就是您的体验。在这种情况下,您需要动态分配内存。所以你不能说
intp[someVariable]
。您需要使用int*mem=newint[someVariable]
<查看< /p> < P>可变长度数组的标准C++类是
std::vector P[3];P[0]。调整大小(项目);P[1].调整大小(项目);P[2].调整大小(项目)代码>有些编译器支持这一点,但它确实是一个扩展(请参阅)