【问题标题】:I want to overload "=" operator but it gives me error [closed]我想重载“=”运算符,但它给了我错误[关闭]
【发布时间】:2015-07-21 03:09:10
【问题描述】:
friend Fraction operator=(const Fraction &newfraction) {

    Fraction changedfraction;

    changedfraction.numerator = newfraction.numerator;
    changedfraction.denominator = newfraction.denominator;

    changedfraction.simplify(changedfraction.numerator, 
                             changedfraction.denominator);
    return (changedfraction);
}

【问题讨论】:

  • 什么错误?。
  • 这是赋值运算符的非正统版本。赋值运算符应该只做一件事和一件事,那就是创建传入对象的副本到现有对象。它不应该执行“业务逻辑”,例如simplify
  • @PaulMcKenzie:我不同意。如果我们假设simplify 不会在语义上改变被分配的“值”,只是优化它的表示,那么调用它是绝对可以的。这更像是std::stringswap 上削减其容量。它不是“业务逻辑”(讨厌这个词!)。 OP 函数的真正问题是它是一个非成员 operator= 只接受一个操作数,甚至没有尝试将任何东西分配给应该是 LHS 操作数的东西。

标签: c++ operator-overloading


【解决方案1】:

签名为Fraction operator=(const Fraction &newfraction) 的赋值运算符必须是成员函数。 friend 函数不是成员。所以参数的数量与分配所需的 2 不匹配。删除 friend 并确保它被声明为成员函数。

struct Fraction
{
  Fraction& operator=(const Fraction &newfraction) { .... }
  ....
};

另请注意,传统上赋值运算符返回对*this 的引用,而不是值。

【讨论】:

  • 非常感谢胡安。我解决了这个错误,但是当我从主调用它时,它给了我一些任意数字。我不能得到正确的结果
  • @Can 你的实现一定是有问题的。
猜你喜欢
  • 2015-03-22
  • 2010-12-20
  • 2023-03-11
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
相关资源
最近更新 更多