我使用4个类实现边缘(如图中所示):Node,Node_Linkedlist,Edge,Edge_Linkedlist。 Node有一个私有int成员,Edge有2个Node节点引用成员:
private:
Node& in;
Node& out;
Edge有2个工作构造函数,因此Edge支持Node
和const Node
。
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;
}
这适用于Node
但不适用于const Node
。在const Node
中,作为运算符范围内的调试器,它会转储Node的int值。为什么运算符不能用于const Node
?
答案 0 :(得分:3)
您的代码无效 - 您在构造函数中绑定了一个非const引用 - Node(tmpin)
和Node(tmpout)
是临时的 - 并且遇到了未定义的行为。要支持const
,您需要使您的成员const
,指针或使其成为对象而不是引用。
就个人而言,我会把它们变成聪明的指针:
private:
std::shared_ptr<Node> in;
std::shared_ptr<Node> out;