Ошибка: невозможно преобразовать параметры из int [10] в int

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;
}
Теги:
data-structures
stack

5 ответов

7
Лучший ответ

Ответ, данный Гангадхар и Янселем, является неполным. Вы передаете значения по ссылке, чтобы этого было недостаточно:

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[]
  • 1
    Определение имеет ссылку.
  • 1
    Не сработало В нем говорится, more than one instance of overloaded function "push" matches the argument list more than one instance of overloaded function "pop" matches the argument list more than one instance of overloaded function "display" matches the argument list
Показать ещё 8 комментариев
3

Вы ошиблись в объявлении функции. Это правильный путь.

void push(int[],int&,int);
void pop(int[],int&);
void display(int[],int&);
2

Эти ошибки представляют собой самоочевидные прототипы push, pop и display получают 3 int параметра, и вы пытаетесь передать int[] первым первым параметром, поэтому измените прототип своих функций, чтобы получить int[] его первого параметра.

1

У вас есть прототип функции для push/pop в начале, объявляющий int не массив.

void push(int, int, int);

Это версия, которую использует компилятор для проверки вашего вызова. Перепишите эти прототипы, чтобы иметь подпись функции как сами функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню