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 元素类型:std::deque<FlowEdge>在另一个类中。当我编译我的项目时,我收到一个错误,说我的FlowEdge类没有可用的operator=方法。这个方法是编译器默认创建的,不是吗?可能是什么问题?我没有operator=,也没有在公共场合,也没有在受保护的部分。

4

1 回答 1

4

如果编译器能够这样做,operator=编译器会为您生成一个。在你的情况下它是不可能的,因为你在班上有一个成员。无法分配这样的成员,因此默认的复制分配运算符不会被明确定义。如果你想分配这个类的对象,你必须提供一个自定义对象,实现它以保留你想要的成员语义。constconst

当然,更简单的选择是制作capacity_一个非常量double。通常,const数据成员仅在非常特定的情况下才有用,而且它们通常带来的麻烦多于其价值。

于 2013-08-29T12:10:27.843 回答