二进制“+=”:未找到采用类型 'Add' C++ 的全局运算符

Binary '+=' : no global operator found which takes type 'Add' C++

我真的被运算符重载绊倒了。我这里有一个用于加法 (+) 的简单操作重载,但它没有在我的 class.

中找到全局运算符

谁能解释一下为什么会这样,我该如何解决?

错误信息:

1>------ Build started: Project: exercise 2, Configuration: Debug Win32 ------
1>Compiling...
1>Add.cpp 1>c:\documents and settings\...\exercise 2\add.cpp(15) :
    error C2677: binary '+=' : no global operator found which takes type 'Add' (or there is no acceptable conversion)
1>Build log was saved at "file://c:\Documents and Settings\...\Debug\BuildLog.htm" 
1>exercise 2 - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Add.h:

#ifndef ADD_H
#define ADD

class Add{
public:
    Add(int = 0);   //default constructor
    Add(Add &);     //copy constructor
    ~Add();         //destructor

    Add operator+(Add &);
private:
    int num;
};

#endif

Add.cpp:

#include "stdafx.h"
#include <conio.h>
#include <iostream>
using namespace std;

#include "Add.h"

Add::Add(int x){
    num = x;
}

Add Add::operator +(Add &y){
    Add x = *this;
    x.num += y;
    return x;
}

非常感谢!

您正在尝试将 Add 添加到 int。将 x.num += y 更改为 x.num += y.num

此外,operator+ 通常最好作为独立的对称函数实现。

当您为 class 重载 + 运算符时,+= 运算符不会自动重载,例如在 C# 中。你必须自己定义它。 -= 等也是如此

您需要将 += 运算符定义为成员函数,并且 return 对被操作实例的引用:

Add& Add::operator += (const Add& rhs) {
    num += rhs.num;
    return *this;
}

您的 + 运算符应该是非成员,并且 return 一个表示操作结果的新实例:

Add operator + (const Add& lhs, const Add& rhs) {
    return Add(lhs.num + rhs.num);
}

此外,在 Add.h 中:

#ifndef ADD_H
#define ADD         // should be ADD_H

// in Add:
    Add(Add &);     // should use 'const Add&'

此外,您不需要定义自己的 copy constructordestructor,如果它们没有做任何特别的事情。就像 class Add 的情况一样,您可以忽略它们,让编译器为您生成它们。