2013-10-09 8 views
0

Это довольно простая программа для реализации Stack. Но есть проблема с объявлением функций push(), pop() и display(). Операторы ошибок следующие. Пожалуйста, помогите мне разобраться с проблемой.Ошибка: невозможно преобразовать параметры из 'int [10]' в 'int'

Ошибка:

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; 
} 
+1

Сделать SSCCE и вы, вероятно, обнаружите ошибку для себя. – chris

+0

Я попытался использовать различные другие объявления, такие как void push (int *, int, int) или void push (int [], int, int) и т. Д., Но никто не работал правильно. –

ответ

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

В определении есть ссылка. – chris

+1

Не работает. Он говорит: «более одного экземпляра перегруженной функции« push »соответствует списку аргументов« »более одного экземпляра перегруженной функции« pop »соответствует списку аргументов« »более чем один экземпляр перегруженной функции« display »соответствует аргументу list' –

+1

@VISHNUVIVEK - Ответ неполный - проверьте мой ответ. – Sadique

2

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

3

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

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

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

void push(int, int, int); 

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

Смежные вопросы