为什么VC ++编译器会给复合运算符重载带来错误?

时间:2014-09-05 20:02:39

标签: c++ visual-studio operator-overloading

我正在努力学习C++。我有一些运算符重载函数如下(我从C ++编程语言第四版,第76页):

complex& operator+=(complex z) { re += z.re; im += z.im; return *this; } // add to re and im
// and return the result
complex& operator−=(complex z) { re  -= z.re; im -= z.im; return *this; }
complex& operator*=(complex); // defined out-of-class somewhere
complex& operator/=(complex); // defined out-of-class somewhere

+=重载工作正常,但对于-=,我得到 10 编译错误:

enter image description here

如果我删除了=并且只是重载-运算符,则会进行编译。是什么原因 ?我想知道我做错了什么?我尝试了几种组合,清除重建解决方案,重新启动Visual Studio,但它们没有用。

注意:我正在使用Visual Studio 2013,并且已安装Visual C++ Compiler November 2013 CTP

以下是完整的类定义:

class complex{
     double re, im;
     // representation: two doubles
public:
    complex(double r, double i) :re{ r }, im{ i } {} // construct complex from two scalars
    complex(double r) :re{ r }, im{ 0 } {} // construct complex from one scalar
    complex() :re{ 0 }, im{ 0 } {} // default complex: {0,0}
    double real() const { return re; }
    void real(double d) { re = d; }
    double imag() const { return im; }
    void imag(double d) { im = d; }
    complex& operator+=(complex z) { re += z.re; im += z.im; return *this; } // add to re and im
    // and return the result
    complex& operator−=(complex z) { re  -= z.re; im -= z.im; return *this; }
    complex& operator*=(complex); // defined out-of-class somewhere
    complex& operator/=(complex); // defined out-of-class somewhere
};

2 个答案:

答案 0 :(得分:2)

似乎在令牌-=中还有一些其他符号(似乎是减号还有其他一些字符)

operator−=(

重新输入令牌-=或从我的帖子中复制整行。:)

complex& operator-=(complex z) { re  -= z.re; im -= z.im; return *this; }

答案 1 :(得分:0)

一些事情:

  • 除了每个初始化程序的大括号外,您的构造函数都可以。大括号仅用于以逗号分隔的成员初始值设定项列表之后的代码块,如下所示:

complex(double r, double i) :re(r), im(i) {}

  • 其次,您似乎在operator-=部分中有一些奇怪的字符。它看起来不错,但是当我粘贴它时它不会编译。我刚刚重新输入了operator-=和zip,它起作用了。