2014-04-01 55 views
-3

我有一些錯誤,但我的主要問題是 - 在我推送模塊,我有一個不完全型「結構棧」,我怎麼能解決這個問題 -無效使用不完全類型的 - 「結構棧」

 struct Stack 
     { 
      Reservation list[10]; 
      int rear; 
      int front; 
     }; 



     void push(struct Stack*, int); 

     if(mainChoice == 5) 
     { 
      push(&stcks, item); 
     }//endif 

    void push(struct Stacks *stcks, int item) 



    { 
     if(!Full(stcks->rear)) 
     { 
       stcks->list[stcks->rear] = item; 
       stcks->rear = stcks->rear + 1; 
      }//endif 
    }//end push 
+5

你從來沒有定義了一個名爲「棧」結構,你定義了一個名爲「棧」,但沒有;

(如果是C++那麼這個類型定義是爲你​​含蓄做你的代碼是否是C或C++目前尚不清楚) 「堆棧」你確定你有正確的錯誤信息嗎? –

+7

這與C#有什麼關係? – itsme86

+0

@Pete,似乎是正確的錯誤信息給我試圖解除引用'stcks' –

回答

1

錯誤:出現

  1. 你的結構定義是嵌套在主函數。爲什麼?嵌套的類/結構幾乎總是不好的做法。 「push」函數也是嵌套的,或者if塊根本不在函數中,這會導致許多「不相關的」錯誤(它不一定是顯而易見的,它導致了問題)。

  2. 當您聲明的唯一結構是Stack時,您使用的類型爲Stacks

  3. 您不要使用「結構」作爲參數列表的一部分,它只是:void Foo(Stack * stck)

  4. 你調用一個名爲Full功能,似乎沒有報關/體。

  5. 當你調用push()時,你傳遞它&stcks,這是一個變量,甚至不是if塊的範圍(從我們可以看到的)。

「不完全定義」可能來自任何或所有這些。擺脫最明顯的錯誤,看看你是否仍然有問題。

0

變化

void push(struct Stacks *stcks, int item) 

void push(struct Stack *stcks, int item) 

爲了避免這個錯誤,你可以使用一個typedef,例如:

typedef struct Stack Stack; 

,並在代碼中使用Stack,而不是struct Stack 。然後,如果你輸入了錯字,編譯器會報錯,而不是假設你聲明瞭一個新的不完整類型。

相關問題