3

私は次のクラスを持っています。ここに完全なプロトタイプがあります:

class FlowEdge{
private:
    const uint32_t from_;
    const uint32_t to_;
    const double capacity_;
    double flow_;
public:
    FlowEdge();
    FlowEdge(uint32_t from, uint32_t to, double capacity);
    uint32_t from() const;
    uint32_t to() const;
    uint32_t other(uint32_t vertex) const throw(std::invalid_argument);
    double getCapacity() const;
    double getFlow() const;
    double residualCapacityTo(uint32_t vertex) const throw(std::invalid_argument);
    void addResidualFlowTo(uint32_t vertex, double delta) throw(std::invalid_argument);
};

このクラスを別のクラスで std::deque element type: として使用しますstd::deque<FlowEdge>。プロジェクトをコンパイルすると、FlowEdgeクラスに使用可能なoperator=メソッドがないというエラーが表示されます。このメソッドはデフォルトでコンパイラによって作成されますね。何が問題になる可能性がありますか?私はoperator=公の場でも、保護されたセクションでもありません。

4

1 に答える 1

4

コンパイラは、可能であればoperator=を生成します。クラスにメンバーがいるため、あなたの場合はできません。このようなメンバーは代入できないため、デフォルトのコピー代入演算子は明確に定義されていません。このクラスのオブジェクトを割り当てたい場合は、カスタムのものを提供し、それを実装して、メンバーに必要なセマンティクスを保持する必要があります。constconst

もちろん、より簡単な方法はcapacity_、非 const を作成することdoubleです。一般に、constデータ メンバーは非常に特定の状況でのみ有用であり、通常は価値があるよりも面倒です。

于 2013-08-29T12:10:27.843 に答える