2015-05-10 80 views
-11
friend Fraction operator=(const Fraction &newfraction) { 

    Fraction changedfraction; 

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

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

**什么**错误? –

+2

这是一个赋值运算符的非正则版本。赋值运算符只应该做一件事,一件事就是创建一个传入的对象到一个现有对象的副本。它不应该执行诸如“简化”的“业务逻辑”。 – PaulMcKenzie

+0

@PaulMcKenzie:我不同意。如果我们假设“简化”不会在语义上改变正在分配的“值”,只是优化它的表示,那么调用它就绝对没问题。这就像'std :: string'在'swap'上修剪它的容量。它不是“业务逻辑”(讨厌这个词!)。 OP函数的真正问题在于它是一个非成员操作符,它仅仅占用一个操作数,甚至不会将任何东西分配给应该是LHS操作数的东西。 –

回答

3

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

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

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

+0

非常感谢你juan。我解决了错误,但是当我从main调用它时,它会给我一些任意的数字。我不能采取正确的结果 – Can

+0

@可以你的实现必须是越野车然后。 – juanchopanza

相关问题