-2

완전한 이진 검색 트리를 만드는 3 개의 클래스가 있습니다. 3 클래스는 입니다. 1. DBentry (이름, IP 주소 및 상태를 저장합니다), 2. TreeNode (자체 DBentry와 해당 항목의 왼쪽과 오른쪽을 나타냄) 3. TreeDB (루트 TreeNode 포함 내가 제대로 작동하지 않는 것 friend ostream& operator<< (ostream& out, const TreeDB& rhs); friend ostream& operator <<(ostream& out, TreeNode* rhs); 이 과부하 사업자가 나는 friend ostream& operator <<(ostream& out, const DBentry& rhs); 내부 TreeDB가)이진 검색 트리 << 연산자 오버로드가 작동하지 않습니다.

내부 DBentry을 추가, 업데이트, 제거 및 DBentryobjects을 찾기 위해 다양한 기능을 제공합니다. 도움이된다면 도움이 될 것입니다.

클래스 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); 
} 

답변

2

ostream& operator <<(ostream& out, TreeNode& rhs)을 가지고는 함수가 ostream에 대한 참조를 반환 말한다. 이 코드는 ostream 참조를 반환하지 않으므로 프로그램은 정의되지 않은 동작에 대한 기쁜 모험을 시작합니다. 프로그램의 게시되지 않은 부분에서 적어도

하고있을 수있는 다른 문제점은,
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<< 과부하

동일한 결함 있어야 OP.

+0

반환과 함께; 세분화 오류가 발생합니다. –

+0

@FabiaBushraTamanna Entry가 NULL이 아닌 경우 왼쪽 또는 오른쪽이 NULL 일 수 있습니까? NULL을 출력하면 쉽게 충돌 할 수 있습니다. – user4581301

+0

예 : 왼쪽 또는 오른쪽이 NULL 일 수 있습니다. 어떻게 해결할 수 있습니까? –