2012-11-05 52 views
2

我正在研究Binary Search Tree類,並且無法編碼重載流操作函數。這是我的代碼...我已經完成了我在網上找到的一切(以及我的教授的權力點),所以我不知道我做錯了什麼。STL在朋友函數中的問題

*編輯幾秒鐘前更新我的代碼更改。決定要求從目標函數被髮送到具有類似的代碼到這是在友元函數的朋友......

在頭文件的相關頭(h文件):

friend ostream& operator<<(ostream& out, const BST& tree); 

void leveltraversal(ostream& out); 

相關的「私人「數據/嵌套類在頭文件(h文件):

private: 
    class BinNode { 
    public: 
    T data; 
    BinNode* left; 
    BinNode* right; 
    BinNode() : left(NULL), right(NULL) {} 
     BinNode (T item): data(item), left(NULL), right(NULL) {} 
    }; 

    typedef BinNode* BinNodePtr; 
    BinNodePtr myRoot; 

相關實現文件的功能:

ostream& operator<<(ostream& out, const BST& tree) 
{ 
    tree.leveltraversal(out); 
    return out; 
} 

template <typename T> 
void BST<T>::leveltraversal(ostream& out) 
{ 
    int level = 0; 
    BinNodePtr temp = myRoot; 
    queue<BinNodePtr> nodes; 
    nodes.push(temp); 
    out << endl << endl; 
    while (!nodes.empty()){ 
     temp = nodes.front(); 
     level = recursive_level(temp->data); 
     out << endl << endl; 
     out << "Node data: " << temp->data; 
     out << endl; 
     out << "Level: " << level; 
     nodes.pop(); 
     if (temp->left) 
     nodes.push(temp->left); 
     if (temp->right) 
     nodes.push(temp->right); 
    } 
} 

我會發布編譯器錯誤,但他們繼續了很多行,我覺得這些問題是不言而喻的。不過,如果有人願意,他們會更新!

+3

你可能想要包含編譯器錯誤/警告 – gvd

+0

噢!對不起......我整天都在編碼,而且有點累。感謝您的幫助:) – user1799411

+0

很難說沒有錯誤信息(第一個(或幾個)通常就足夠了),但首先,你是在用什麼實例化'BST'模板,即什麼是'temp - > data'? – molbdnilo

回答

0

由於您沒有列出錯誤消息,甚至沒有說明您遇到的問題類型,所以很難提供幫助。但是我試圖填補空白的一些複製您的問題,並發現了幾個與代碼的問題:

template <typename T> 
class BST { 
    ... 
    friend std::ostream& operator<<(std::ostream& out, const BST& tree) 
    { 
     tree.leveltraversal(out); 
     return out; 
    } 
  • operator<<你把const BST& tree(這意味着你不能改變原來的對象,雖然這個參考),因此leveltraversal功能必須也被宣佈爲const。您不能在const對象上調用非const成員函數;如果允許的話,可以讓你修改對象,打破const
void leveltraversal(std::ostream& out) const; 

隨着這些變化,我用clang和g ++編譯的代碼都很好。