c++编译错误怎么办?
1个回答
展开全部
C++不支持动态数组,比如像Basic中的Redim,Pascal中的SetLength等
C++中的动态数组是以动态内存分配来实现的,即用new和delete动态分配和删除数组空间
所以像int Rev[len];这样的定义是非法的
根据楼主说的main函数中可以编译,那可能是在main函数中,len被赋予了常量,这样C++能够根据语法判断出实际是类似于int Rev[10]这样的定义,所以是可以编译通过的
但是在函数中,上述定义是不行的,因为函数调用时,编译器无法判断传递来的参数是否是编译期的常量,这样就构成了动态数组的定义,这在C++中是非法的
################################################
我刚测试了你的代码,是MinGW编译器,这是Dev Cpp内置的编译器:
错误应该是
void Rev(int Data,const int &len)这一行,这和你的声明
void Rev(int Data[],const int &len)是不同的。
我想你的本意应该是
void Rev(int Data[],const int &len)
这也就解释了在main中正确的原因,因为在main中定义的
int Data[len];是正确的
C++中的动态数组是以动态内存分配来实现的,即用new和delete动态分配和删除数组空间
所以像int Rev[len];这样的定义是非法的
根据楼主说的main函数中可以编译,那可能是在main函数中,len被赋予了常量,这样C++能够根据语法判断出实际是类似于int Rev[10]这样的定义,所以是可以编译通过的
但是在函数中,上述定义是不行的,因为函数调用时,编译器无法判断传递来的参数是否是编译期的常量,这样就构成了动态数组的定义,这在C++中是非法的
################################################
我刚测试了你的代码,是MinGW编译器,这是Dev Cpp内置的编译器:
错误应该是
void Rev(int Data,const int &len)这一行,这和你的声明
void Rev(int Data[],const int &len)是不同的。
我想你的本意应该是
void Rev(int Data[],const int &len)
这也就解释了在main中正确的原因,因为在main中定义的
int Data[len];是正确的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询