Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将大小为整数变量的数组声明为整数变量时,为什么会出现编译器错误?_C++_Arrays_Visual Studio 2008_Compiler Errors_Dev C++ - Fatal编程技术网

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].调整大小(

在visual studio中,我遇到了一个以前在Dev-C++中没有的错误:

int project = (rand() % 5) + 1 ;
int P[project][3];
汇编:

错误C2057:预期的常量表达式
错误C2466:无法分配常量大小为0的数组
错误C2133:“P”:未知大小


你能帮助理解这个错误吗P的大小需要在编译时知道,并且它应该是一个常量,编译器会通过诊断消息向您发出警告

为什么在不同的编译器上有不同的结果?


大多数编译器允许您通过编译器扩展创建可变长度数组,但这是非标准批准的,这种使用将使您的程序无法在不同的编译器实现之间移植。这就是您的体验。

在这种情况下,您需要动态分配内存。所以你不能说
intp[someVariable]
。您需要使用
int*mem=newint[someVariable]


<查看< /p> < P>可变长度数组的标准C++类是 STD::vector < /代码>。在这种情况下,您将得到
std::vector P[3];P[0]。调整大小(项目);P[1].调整大小(项目);P[2].调整大小(项目)

有些编译器支持这一点,但它确实是一个扩展(请参阅)