gpt4 book ai didi

c++ - 类中缺少运算符=

转载 作者:太空狗 更新时间:2023-10-29 21:01:26 25 4
gpt4 key购买 nike

我有以下类(class),这是完整的原型(prototype):

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>在另一个类(class)。当我编译我的项目时,我收到一条错误消息说我的 FlowEdge类没有可用operator=方法。这个方法是编译器默认创建的,不是吗?可能是什么问题?我没有operator=既不在公共(public)场合,也不在 protected 部分。

最佳答案

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

当然,更简单的替代方法是使 capacity_ 成为非常量 double。通常,const 数据成员只在非常特殊的情况下才有用,而且它们通常带来的麻烦超过了它们的值(value)。

关于c++ - 类中缺少运算符=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18510447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com