2014-11-06 16 views
10

Sto provando a scrivere un programma che implementa le funzioni Pop e Push. Il problema è, sto cercando di passare il puntatore che punta a intero Top alla funzione, in modo che questo intero continua a cambiare, ma quando provo a compilare ho sempre questa linea:Programmazione C, errore: l'oggetto chiamato non è una funzione o un puntatore di funzione

**error: called object is not a function or function pointer (*t)--

#include<stdio.h> 
#include<stdlib.h> 

#define MAX 10 
int push(int stac[], int *v, int *t) 
{ 
    if((*t) == MAX-1) 
    { 
     return(0); 
    } 
    else 
    { 
     (*t)++; 
     stac[*t] = *v; 
     return *v; 
    } 
} 

int pop(int stac[], int *t) 
{ 
int popped; 
if((*t) == -1) 
{ 
     return(0); 
} 
else 
{ 
    popped = stac[*t] 
    (*t)--; 
    return popped; 
} 
} 
int main() 
{ 
int stack[MAX]; 
int value; 
int choice; 
int decision; 
int top; 
top = -1; 
do{ 
    printf("Enter 1 to push the value\n"); 
    printf("Enter 2 to pop the value\n"); 
    printf("Enter 3 to exit\n"); 
    scanf("%d", &choice); 
    if(choice == 1) 
    { 
     printf("Enter the value to be pushed\n"); 
     scanf("%d", &value); 
     decision = push(stack, &value, &top); 
     if(decision == 0) 
     { 
      printf("Sorry, but the stack is full\n"); 
     } 
     else 
     { 
      printf("The value which is pushed is: %d\n", decision); 
     } 
    } 
    else if(choice == 2) 
    { 
     decision = pop(stack, &top); 
     if(decision == 0) 
      { 
       printf("The stack is empty\n"); 
      } 
     else 
      { 
       printf("The value which is popped is: %d\n", decision); 
      } 

    } 
}while(choice != 3); 
printf("Top is %d\n", top); 

} 
+5

+1 per l'esotico _misura semicolon_, benvenuto allo stackoverflow :) – Rerito

+0

Questo commento mi ha fatto sorridere così tante volte ... – Frederick

risposta

17

È perso una virgola poco prima che la linea con l'errore:

poped = stac[*t] <----- here 
(*t)--; 

La ragione di questo strano errore è che il compilatore ha visto sth così:

poped = stac[*t](*t)--; 

Quale potrebbe interpretare come una chiamata a un puntatore di funzione proveniente da una tabella, ma questo ovviamente non ha senso, perché stac è un array di ints, non una matrice di puntatori di funzione.

+0

Grazie, stavo cercando l'errore e non posso credere di non averlo fatto vedere il punto e virgola mancante. –

+1

@AbylIkhsanov - è così che la vita è con questi compilatori (; questa è una buona lezione - è spesso necessario cercare l'errore PRIMA della linea menzionata nel messaggio. –