0

这是一个相当简单的 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;
}
4

5 回答 5

7

Gangadhar 和 Jansel 给出的答案是不完整的。您通过引用传递值,所以这还不够:

void push(int stack[size],int,int);

这就是你需要的:

void push(int[],int&,int);
void pop(int[],int&);
void display(int[],int&);
于 2013-10-09T04:31:41.310 回答
4

你的函数声明是错误的。例如:

void push(int, int, int);
//        ^^^ int  

改正就好

void push(int stack[], int&, int);
//            ^^^^^^^^^^^ should be int[]
于 2013-10-09T04:26:52.653 回答
3

在函数声明中犯了错误。这是正确的方法。

void push(int[],int&,int);
void pop(int[],int&);
void display(int[],int&);
于 2013-10-09T04:31:12.313 回答
2

这些错误是不言自明push的,函数原型接收 3 个参数,pop并且您试图通过第一个参数传递,因此,将函数原型更改为接收它的第一个参数。displayintint[]int[]

于 2013-10-09T04:28:26.833 回答
1

您在开始时有一个用于 push/pop 的函数原型,它声明了一个 int 而不是一个数组。

void push(int, int, int);

这是编译器用来检查您的调用的版本。重写这些原型以将函数签名作为函数本身。

于 2013-10-09T04:31:22.300 回答