2012-09-15 26 views
0

我想請我的代碼反饋。這是學校的任務,我們被要求編寫一個交換左側和右側二叉樹的函數。我們的教授給我們的班是swapBinaryTrees,其餘的留給我們。我收到了很多編譯器錯誤,我不確定我的語法錯在哪裏。我收到錯誤,當我編譯它像14行預期的init聲明符「<」令牌基準線是流血的Dev-C++編譯器錯誤*二叉樹

void binaryTreeSearch<elemType>::swapSubtreeNodes() 

我有這

void binaryTreeSearch<elemType>::swapSubtreeNodes(nodeType<elemType> *p) 

兩個線19相同的錯誤上面我有另一個錯誤,說期待';'前「<」令牌 然後我得到了我的主要功能未聲明的標識符爲

binaryTreeSearch<int> tree; 

我也是如預期般「Int」和之前的預期主要表達「;」之前「int」 然後它告訴我cout和cin沒有聲明我不知道haybales在這裏發生了什麼。我將在下面發佈我的整個代碼,非常感謝任何幫助。

template <class elemType> 
struct nodeType 
{ 
     elemType info; 
     nodeType<elemType> *lLink; 
     nodeType<elemType> *rLink; 
}; 
template <class elemType> 
class swapSubtreeNodes 
{ 

}; 
template <class elemType> 
void binaryTreeSearch<elemType>::swapSubtreeNodes() 
{ 
    swapSubtreeNodes(root); 
} 
template <class elemType> 
void binaryTreeSearch<elemType>::swapSubtreeNodes(nodeType<elemType> *p) 
{ 
    root = temp; 
    nodeType<elemType> *root; 
    nodeType<elemType> *temp; 
    if (p == null) 
    { 
      return; 
    } 
    else 
    { 
     swapSubtreeNodes(p->lLink); 
     swapSubtreeNodes(p->rLink);         
     temp = p->lLink; 
     p->lLink = p->rLink; 
     p->rLink = temp; 
    } 
} 
int main() 
{ 
    binaryTreeSearch<int> tree; 
    int num; 
    cout << "This is how we swap'em" << endl; 
    cout << "Insert number (press enter after each one entered)." << endl; 
    cout << "Enter -999 to complete" << endl; 
    tree.insert(0); 
    cin >> num; 
    while (num != -999) 
    { 
      tree.insert(num); 
      cin >> num; 
    } 
    cout << "Your swapped binary tree is " << endl; 
     tree.swapSubtreeNodes(); 
     tree.printTree(); 
     cout << endl; 


} 
+0

開發-C++的最新版本發佈於2005年,是非常古老和過時的,請考慮升級到一個現代化的一個像GCC或Visual C++。 –

+0

@SethCarnegie:這裏有一個分支:http://orwelldevcpp.blogspot.fr/它看起來很好。 –

+0

@AlexandreC。感謝您的信息,我不知道任何叉子。我會向未來的人推薦。 –

回答

0

您沒有聲明binaryTreeSearch類型。因此你不能實現它的成員函數。你的編譯器告訴你,它沒有任何線索,您可以通過

template <class elemType> 
void binaryTreeSearch<elemType>::swapSubtreeNodes() 

在與<位置的意思,因爲它不明白,你打算binaryTreeSearch是一類。


你在做什麼,當你寫:

template <class elemType> 
void binaryTreeSearch<elemType>::swapSubtreeNodes() 
{ 
    swapSubtreeNodes(root); 
} 

是這樣;你告訴您打算執行int()()類型的成員函數swapSubTreeNodes屬於結構化類型C++(即classstruct),該模板帶有一個參數的名稱binaryTreeSearch的。然而,你的編譯器(任何編譯器真的)抱怨,因爲沒有這種類型。你如何解決這個問題取決於你真正打算做什麼。一個選項可以宣佈類型:

template <class elemType> 
class binaryTreeSearch // I really recommend to write types Uppercase! 
{ 
    private: 
    nodeType<elemType>* root; 
    //     ^---- that's the variably you are trying to 
    //      access in your original post 
    public: 
    void swapSubtreeNodes(); 
    void swapSubtreeNodes(nodeType<elemType>*); 
}; 

這不會解決所有的錯誤,但可能是你究竟想要做的事。您可能還想添加適當的構造函數和析構函數。

+0

所以我應該聲明它爲「類」binaryTreeSearch而不是? – Angie

+0

@Angie:我真的不確定是什麼讓你失望,在這裏。讓我重新解釋答案。 – bitmask

+0

@Angie:看到我的更新。 – bitmask