快快快!c++编译错误:invalid types `int[int]' for array subscript
程序:#include<iostream>#definemaxn50usingnamespacestd;intn;inta,b[maxn];intinit(int);in...
程序:
#include <iostream>
#define maxn 50
using namespace std;
int n;
int a,b[maxn];
int init(int);
int print(int);
int del(int,int,int);
void task1(void);
void task2(void);
int init(int v[maxn])
{
int i;
cout<<"Input n:"<<endl;
cin>>n;
cout<<"Input"<<n<<"integer numbers:";
for (i=0;i<=n-1;i++)
cin>>v[i];
}
int print(int v[maxn])
{
int i;
for (i=0;i<=n-1;i++)
cout<<v[i]<<" ";
cout<<endl;
}
void task1(void)
{
int i,j;
init(a);
for (i=0;i<=n-1;i++)
{
b[i]=0;
for (j=0;j<=i-1;j++)
if (a[i]>a[j]) b[i]++; (这行编译错误)
}
cout<<"The code of array A is:";
print(b);
}
int del(int v[maxn],int n,int i)
{
int j;
for (j=i;j<=n-2;j++)
v[j]=v[j+1];
n--;
}
void task2(void)
{
int i,len;
int c[maxn];
init(b);
for (i=0;i<=n-1;i++)
c[i]=i;
len=n;
for (i=n-1;i>=0;i--)
{
a[i]=c[b[i]];(这行编译错误)
del(c,len,b[i]);
}
cout<<"Array A is:";
print(a);
}
int main ()
{
task1();
task2();
system("pause");
}
本人新手,请各位c++高手指点!快快快!拜托了! 展开
#include <iostream>
#define maxn 50
using namespace std;
int n;
int a,b[maxn];
int init(int);
int print(int);
int del(int,int,int);
void task1(void);
void task2(void);
int init(int v[maxn])
{
int i;
cout<<"Input n:"<<endl;
cin>>n;
cout<<"Input"<<n<<"integer numbers:";
for (i=0;i<=n-1;i++)
cin>>v[i];
}
int print(int v[maxn])
{
int i;
for (i=0;i<=n-1;i++)
cout<<v[i]<<" ";
cout<<endl;
}
void task1(void)
{
int i,j;
init(a);
for (i=0;i<=n-1;i++)
{
b[i]=0;
for (j=0;j<=i-1;j++)
if (a[i]>a[j]) b[i]++; (这行编译错误)
}
cout<<"The code of array A is:";
print(b);
}
int del(int v[maxn],int n,int i)
{
int j;
for (j=i;j<=n-2;j++)
v[j]=v[j+1];
n--;
}
void task2(void)
{
int i,len;
int c[maxn];
init(b);
for (i=0;i<=n-1;i++)
c[i]=i;
len=n;
for (i=n-1;i>=0;i--)
{
a[i]=c[b[i]];(这行编译错误)
del(c,len,b[i]);
}
cout<<"Array A is:";
print(a);
}
int main ()
{
task1();
task2();
system("pause");
}
本人新手,请各位c++高手指点!快快快!拜托了! 展开
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];是正确的
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];是正确的
展开全部
#include <iostream>
#define maxn 50
using namespace std;
int n;
int a[maxn],b[maxn];
int init(int);
int print(int);
int del(int,int,int);
void task1(void);
void task2(void);
int init(int v[maxn])//搜索
{
int i;
cout<<"Input n:"<<endl;
cin>>n;
cout<<"Input"<<n<<"integer numbers:";
for (i=0;i<=n-1;i++)
cin>>v[i];
}
int print(int v[maxn])
{
int i;
for (i=0;i<=n-1;i++)
cout<<v[i]<<" ";
cout<<endl;
}
void task1(void)
{
int i,j;
init(a);
for (i=0;i<=n-1;i++)
{
b[i]=0;
for (j=0;j<=i-1;j++)
if (a[i]>a[j]) b[i]++; //(这行编译错误)
}
cout<<"The code of array A is:";
print(b);
}
int del(int v[maxn],int n,int i)
{
int j;
for (j=i;j<=n-2;j++)
v[j]=v[j+1];
n--;
}
void task2(void)
{
int i,len;
int c[maxn];
init(b);
for (i=0;i<=n-1;i++)
c[i]=i;
len=n;
for (i=n-1;i>=0;i--)
{
a[i]=c[b[i]];//(这行编译错误)
del(c,len,b[i]);
}
cout<<"Array A is:";
print(a);
}
int main ()
{
task1();
task2();
system("pause");
}
你的数组a定义成了正型变量,小错误,
谢谢,望采纳
#define maxn 50
using namespace std;
int n;
int a[maxn],b[maxn];
int init(int);
int print(int);
int del(int,int,int);
void task1(void);
void task2(void);
int init(int v[maxn])//搜索
{
int i;
cout<<"Input n:"<<endl;
cin>>n;
cout<<"Input"<<n<<"integer numbers:";
for (i=0;i<=n-1;i++)
cin>>v[i];
}
int print(int v[maxn])
{
int i;
for (i=0;i<=n-1;i++)
cout<<v[i]<<" ";
cout<<endl;
}
void task1(void)
{
int i,j;
init(a);
for (i=0;i<=n-1;i++)
{
b[i]=0;
for (j=0;j<=i-1;j++)
if (a[i]>a[j]) b[i]++; //(这行编译错误)
}
cout<<"The code of array A is:";
print(b);
}
int del(int v[maxn],int n,int i)
{
int j;
for (j=i;j<=n-2;j++)
v[j]=v[j+1];
n--;
}
void task2(void)
{
int i,len;
int c[maxn];
init(b);
for (i=0;i<=n-1;i++)
c[i]=i;
len=n;
for (i=n-1;i>=0;i--)
{
a[i]=c[b[i]];//(这行编译错误)
del(c,len,b[i]);
}
cout<<"Array A is:";
print(a);
}
int main ()
{
task1();
task2();
system("pause");
}
你的数组a定义成了正型变量,小错误,
谢谢,望采纳
追问
谢谢啦
追答
不客气,共同学习,都是这么一步步走过来的,
加油哦
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询