这是一个用于实现Stack的相当简单的程序。但是push()
,pop()
和display()
函数的声明存在问题。错误陈述如下。请帮我弄清楚问题。
错误:
error C2664: 'push' : cannot convert parameter 1 from 'int [10]' to 'int'
error C2664: 'pop' : cannot convert parameter 1 from 'int [10]' to 'int'
error C2664: 'display' : cannot convert parameter 1 from 'int [10]' to 'int'
程序:
#include<iostream>
#define STACKSIZE 10
using namespace std;
void push(int,int,int);
void pop(int,int);
void display(int,int);
int main()
{
int stack[STACKSIZE],n,data,stackptr=-1;
while(1)
{
cout<<"1. Push\n2. Pop\n3. Display\n4. Exit\n";
cin>>n;
switch(n)
{
case 1:
cout<<"\nEnter a data to push: ";
cin>>data;
push(stack,stackptr,data);
break;
case 2:
pop(stack, stackptr);
break;
case 3:
display(stack, stackptr);
break;
case 4:
exit(1);
break;
default:
cout<<"\nEnter correct choice...\n\n";
}
}
system("pause");
return 0;
}
void display(int stack[STACKSIZE], int &stackptr)
{
cout<<"\n\n";
for(int i=0;i<stackptr;i++)
cout<<stack[i]<<"\n";
cout<<"\n\n";
}
void push(int stack[STACKSIZE],int &stackptr, int data)
{
if(stackptr == STACKSIZE - 1)
{
cout<<"\n\nStack full\n\n";
return ;
}
stackptr++;
stack[stackptr] = data;
}
void pop(int stack[STACKSIZE], int &stackptr)
{
if(stackptr == 0)
{
cout<<"\n\nStack Empty\n\n";
return ;
}
stackptr = stackptr-1;
}
答案 0 :(得分:7)
Gangadhar和Jansel给出的答案是不完整的。您通过引用传递值,因此这还不够:
void push(int stack[size],int,int);
这就是你需要的:
void push(int[],int&,int);
void pop(int[],int&);
void display(int[],int&);
答案 1 :(得分:4)
你的函数的声明是错误的。例如:
void push(int, int, int);
// ^^^ int
纠正它
void push(int stack[], int&, int);
// ^^^^^^^^^^^ should be int[]
答案 2 :(得分:3)
你 在功能声明中犯了错误 。这是正确的方法。
void push(int[],int&,int);
void pop(int[],int&);
void display(int[],int&);
答案 3 :(得分:2)
这些错误是自解释的push
,pop
和display
函数原型接收3个int
参数,并且您首先尝试传递int[]
参数,所以,更改你的函数原型以接收它的第一个参数的int[]
。
答案 4 :(得分:1)
你在开始时有一个push / pop的函数原型,声明一个int而不是一个数组。
void push(int, int, int);
这是编译器用于检查您的呼叫的版本。重写这些原型以将函数签名作为函数本身。