缺少operator =在课堂上

时间:2013-08-29 12:01:46

标签: c++ std

我有以下课程,这是完整原型:

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=,也没有公开,也没有受保护的部分。

1 个答案:

答案 0 :(得分:4)

如果能够这样做,编译器会为你生成一个operator=在你的情况下它是不可能的,因为你在这个类中有一个const成员。无法将此成员分配给,因此默认的复制赋值运算符不能很好地定义。如果要分配此类的对象,则必须提供自定义对象,实现它以保留const成员所需的语义。

当然,更简单的替代方法是使capacity_成为非常量double。通常,const数据成员仅在非常具体的情况下才有用,而且它们通常比它们的价值更麻烦。