C++ 编程提示invalid types `int[int]' for array subscript

来源:百度知道 编辑:UC知道 时间:2024/06/22 15:46:58
#include <iostream>
using namespace std;

void Rev(int Data[],const int &len);
int main()
{
cout<<"Input Len:"<<endl;
int len=0;
cin>>len;

int Data[len];
for(int i=0;i<len;i++)
{
Data[i]=i;
if(i==len-1)cout<<Data[i]<<endl;
else cout<<Data[i]<<" , ";
}
cout<<endl<<"~~~~~~~~~~~~~~~"<<endl;
Rev(Data,len);

return 0;
}

void Rev(int Data,const int &len)
{
int Rev[len];//这行提示错误
for(int i=0;i<len;i++)
{
Rev[i]=Data[len-1-i];
}

for(int i=0;i<len;i++)
{
if(i==len-1)cout<<Rev[i]<<endl;
else cout<<Rev[i]<<" , ";
}
}

提示错误: invalid types `int[int]' for array subscript

如果只在main函数里面做的话,就能通过编译,

但分成2个函数的就会提

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];是正确的

第一次听说G++支持动态数组定义,确实学到了!!!

唉,你把数组名定义成了函数名相同的!
你的数组名和函数名重名了!

标准C++不支持g++那样用变量定义数组
例如:
int l;
int a[l];

void Rev( int *data, int l )
{
int n = l/2;
int i, temp;

for( i=0; i<n; i++ ) {
temp = data[i];
data[i] = data[l-1-i];
data[l-1-i] =