二叉搜索树<<运算符重载不起作用

Binary search tree << operator overload not working

本文关键字:lt 重载 不起作用 运算符 搜索树      更新时间:2023-10-16

我有3个类,可以创建一个完整的二进制搜索树。这三个课程是1. DBENTRY(存储名称,IP地址和状态),2. treenode(指向其自己的dbentry,以及其左右的条目)3. TreedB(包含一个根treenode,并提供了各种功能来添加,删除,更新和查找dbentryObjects)

在dbentry内部我有 friend ostream& operator <<(ostream& out, const DBentry& rhs);在treedb内部我有 friend ostream& operator<< (ostream& out, const TreeDB& rhs); friend ostream& operator <<(ostream& out, TreeNode* rhs);这些超载操作员似乎无法正常工作。任何帮助真的很有帮助。

类dbentry:

class DBentry {
private:
string name;
unsigned int IPaddress;
    bool active;
public:
DBentry();
    DBentry (string _name, unsigned int _IPaddress, bool _active);

~DBentry(); 

void setName(string _name);

void setIPaddress(unsigned int _IPaddress);

    void setActive (bool _active);

string getName() const;

unsigned int getIPaddress() const;

    bool getActive() const;
    friend ostream& operator <<(ostream& out, const DBentry& rhs);
};

类Treenode:

class TreeNode {
private:
DBentry* entryPtr;
TreeNode* left;
TreeNode* right;
public:
TreeNode();
TreeNode(DBentry* _entryPtr);

~TreeNode();

void setLeft(TreeNode* newLeft);

void setRight(TreeNode* newRight);

TreeNode* getLeft();

TreeNode* getRight();

DBentry* getEntry() const;
bool find(string _name);

};

类TreedB具有private: TreeNode* root;

ostream& operator <<(ostream& out, const DBentry& rhs){
out<<rhs.name<<" : "<<rhs.IPaddress<<" : ";//<<rhs.active?    (out<<"active"):(out<<"inactive")<<endl;
if(rhs.active)
    out<<"active";
else
    out<<"inactive";
out<<endl;
}
ostream& operator <<(ostream& out, TreeNode& rhs){
if(rhs.getEntry()!=NULL){
    out << *(rhs.getLeft());
    out << *(rhs.getEntry());
    out << *(rhs.getRight());
}
}
ostream& operator<< (ostream& out, const TreeDB& rhs){
out << *(rhs.root);
}

ostream& operator <<(ostream& out, TreeNode& rhs)表示该功能返回对ostream的引用。该代码不会返回ostream参考,因此该程序将对不确定的行为进行快乐的小冒险。

至少,在程序的未播放部分中可能还有其他问题,OP必须

ostream& operator <<(ostream& out, TreeNode& rhs){
    if(rhs.getEntry()!=NULL){
        out << *(rhs.getLeft());
        out << *(rhs.getEntry());
        out << *(rhs.getRight());
    }
    return out; //<-- return the stream. Do not cross streams unless fighting Gozer.
}

其他operator<<超载具有相同的缺陷。