2011-10-27 63 views
-1

請幫我一把。我收到上述錯誤消息,但尚未能夠解決它。我在這裏粘貼了頭文件和commonStack函數。也許你會看到我錯過的東西。我也收到「未終止的ifndef」錯誤消息。正如你從頭文件中看到的那樣,我用endif結束了這個類。所以我不確定我做錯了什麼。請幫忙。謝謝。變量或字段'commonStack'聲明爲空

//Header file. 
//Class definition for the stack ADT 

#ifndef _mystack_H 
#include <ostream> 
#include <fstream> 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#define _mystack_H 


const unsigned int maxSize = 10; 

class Stack 
{ 
    public: 
      Stack(); //constructor 

      ~Stack(); //Destructor 

      bool isEmptyStack(); 

      bool isFullStack(); 

      void pushStack(int newItem); 

      void popStack(int item); 

      void initializeStack(); 

      void fillStack(int numSize); 

      void exchangeTopAndBottom(Stack &stk); 

      void printStack(Stack &stk); 

      int sumStack(Stack &stk); 

      void OddElem(Stack &stk); 

      //void commonStack(Stack &stk1, Stack &stk2); 

      void intersectStack(Stack &stk1, Stack &stk2); 

    private: 
      int maxSize; //variable to store the maximum stack size 
      int stackTop; //variable to poit to the top of the stack 
      Stack arrList;//pointer to the array that holds the stack 
          //elements 

};  

#endif 



//commonStack finds the union of two stacks 
void Stack::commonStack(Stack &stk1, Stack &stk2) 
{ 
    Stack temp, temp2, tempStk, tempStk1, tempStk2, cStack; 
    int elem, elem1, elem2, elem3; 

    while (!stk1.isEmptyStack()) 
    { 
     stk1.popStack(elem); 
     cStack.pushStack(elem); 
     tempStk1.pushStack(elem); 
    } 

while (!stk2.isEmptyStack()) 
{ 
     stk2.popStack(elem1); 

     while (!tempStk1.isEmptyStack()) 
     { 
      tempStk1.popStack(elem2); 

      if (elem1 == elem2) 
      { 
         temp.pushStack(elem2); 
         tempStk2.pushStack(elem2); 
      } 
      else 
      { 
       temp2.pushStack(elem2); 
       tempStk2.pushStack(elem2); 
      } 
     } 

     while (!tempStk2.isEmptyStack()) 
     { 
      tempStk2.popStack(elem2); 
      tempStk1.pushStack(elem); 
     } 

     tempStk.pushStack(elem1); 
} 

while (!cStack.isEmptyStack()) 
{ 
     temp2.popStack(elem3); 
     cStack.pushStack(elem3); 
} 

printStack(cStack); 
} 
+0

'commonStack'被註釋掉,並且在您發佈的代碼中沒有'#endif'。 – curiousguy

+0

@curiousguy:是的,只是不在文件的末尾。 –

+0

我看到'#endif'。但是'commonStack'的聲明在哪裏? – curiousguy

回答

1

您定義commonStack但在class從來沒有宣佈它(聲明被註釋掉)。而且,這不是用頭警衛通常的方式,它通常做這樣的:

#ifndef MY_HEADER_GUARD_H 
#define MY_HEADER_GUARD_H 

... code for the header file here, ALL code ... 

#endif 

更改宏定義的東西,不以下劃線開頭,因爲這些名稱均用於實施。

+0

作爲K-假面舞會指出: (1)commonStack在類註釋掉 (2)你有警衛關閉(雖然我不知道,如果在宏觀領先的下劃線是一個大問題,我知道這是對符號由於連接器的行爲 成員函數的另外commonStack哈希語義...但是,這沒有任何意義。 如果commonStack是一個成員,它要麼被定義爲一個獨立的功能以及(堆棧也許有朋友)或也許是比較自我的另一個ASA成員函數。 – nhed

+0

我忘了取消註釋commonStack。我評論它,當我開始收到錯誤消息。你說的堆棧的立場-A-孤獨的功能或朋友的意思嗎?你能給我是一個例子嗎?這是我第一堂課,所以我不熟悉所有的術語。謝謝 – ck22