2

我使用 4 个类实现了边(如在图中):Node、Node_Linkedlist、Edge、Edge_Linkedlist。Node 有一个私有 int 成员,Edge 有 2 个对 Node 的引用成员:

private:
    Node& in;
    Node& out;

Edge 有 2 个工作构造函数,因此 Edge 同时支持Nodeconst 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

4

1 回答 1

3

您的代码无效-您将非常量引用绑定到构造函数中的临时对象-Node(tmpin)并且Node(tmpout)是临时对象-并且遇到未定义的行为。要支持const,您要么需要创建成员const、指针,要么将它们设为对象而不是引用。

就个人而言,我会让它们成为智能指针:

private:
  std::shared_ptr<Node> in;
  std::shared_ptr<Node> out;
于 2012-05-03T17:58:15.410 回答