2012-05-03 4 views
2

4 개의 클래스 Node, Node_Linkedlist, Edge, Edge_Linkedlist를 사용하여 에지를 구현했습니다 (그래프처럼). 노드는 전용 INT 부재를 가지며, 에지 노드 2 기준 부재 가지고클래스의 const 인스턴스에 print 연산자를 사용하려면 어떻게해야합니까?

private: 
    Node& in; 
    Node& out; 

에지 가장자리와 Nodeconst Node 모두 2 작업 생성자 같은 것을 지원한다.

Edge(Node& tmpin, Node& tmpout) : in(tmpin),out(tmpout) {}; 
Edge(const Node& tmpin, const Node& tmpout) : in(Node(tmpin)),out(Node((tmpout))) {}; 

<< 운영자 :

ostream& operator<<(ostream& out, const Edge& node) 
{ 
    out<<node.in<<endl; 
    return out; 
} 

const Node에 대한 Node 작동하지만. const Node에서는 디버거가 연산자의 범위에 속하므로 Node의 int 값을 덤프합니다. 운영자가 const Node에서 작동하지 않는 이유는 무엇입니까?

+0

이 어떻게 (짧은) 해결하기 위해 당신이 잘못된 (긴) 무슨 일이 일어나고 있는지 알고 싶어, 나 :

개인적으로, 나는 그들 스마트 포인터를 만들 것? – Beta

+0

@Beta 기존 답변 이외에요? –

+0

신경 쓰지 마세요. 내 의견과 @ LuchianGrigore의 답변이 교차했습니다. (나는 그의 것보다 더 긴 설명을 썼을 것이다. 그러나 그것이 더 좋았을 것이라고 생각하지는 않는다.) – Beta

답변

3

코드가 올바르지 않습니다. 생성자에서 임시가 아닌 참조를 바인딩하고 있습니다 (및 Node(tmpout)은 임시 임). 정의되지 않은 동작으로 실행됩니다. const을 지원하려면 회원 const을 포인터로 만들거나 참조가 아닌 개체로 만들어야합니다.

private: 
    std::shared_ptr<Node> in; 
    std::shared_ptr<Node> out; 
+0

나는 구성원들에게 const가 필요한지 확실하지 않았다. 감사! – winuall

관련 문제