2

Node、Node_Linkedlist、Edge、Edge_Linkedlist の 4 つのクラスを使用して (グラフのように) エッジを実装しました。Node にはプライベート int メンバーがあり、Edge には Node への 2 つの参照メンバーがあります。

private:
    Node& in;
    Node& out;

Edge には、Edge が と の両方Nodeをサポートするような 2 つの作業コンストラクターがあり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、デバッガーがオペレーターのスコープに入るときに、ノードの int 値をダンプします。演算子が で機能しないのはなぜconst Nodeですか?

4

1 に答える 1

3

あなたのコードは無効です - 非 const 参照をコンストラクターの一時的なものにバインドしています -Node(tmpin)そしてNode(tmpout)一時的です - そして未定義の動作に陥っています。をサポートするconstには、メンバーconst、ポインターを作成するか、参照ではなくオブジェクトにする必要があります。

個人的には、それらをスマート ポインターにします。

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