1
#include <iostream>

class A
{
public:
  int a;
  A() { a = 2;}
  A(int f) { a= f;}
  void print() { std::cout << a << std::endl; }
};

class B
{
  A a, at, at2;
  A& operator += (A& b)
  {
    a.a = a.a + b.a;
    return a;
  }
public:
  B(int a_, int at_, int at2_) : a(a_), at(at_), at2(at2_) {};
  void update ()
  {
    a += at;
  }
  void printAll() { a.print(); at.print();}
};

int main()
{
  B value ( 2, 3, 5);
  value.printAll();
  value.update();
  value.printAll();
}

错误是:

temp.cpp:24:10: 错误: '((B*)this)->B::a += ((B*)this)->B::at' 中的 'operator+=' 不匹配

我究竟做错了什么 ?

4

2 回答 2

2

您定义的运算符是A & operator+=(B &, A & ),不是A & operator+=(A &, A &)。因此,您已经定义了如何将 an 添加A到 a B,但没有定义如何将 an 添加A到 an A。在定义之后class A但在定义之前尝试这个class B

A & operator+=(A & a1, const A & a2) { a1.a += a2.a; return a1; }

但是这种运算符更自然地定义为成员函数。

于 2013-01-29T23:27:38.637 回答
0
A& B::operator += (A& b)

方法

A & operator+=(B &, A & )

您只需要添加operator +=(const A&b) 到 A 类

class A
{
//....
    A& operator += (const A& b)
    {
       a += b.a;
       return *this;
    }
//....
};

非会员版本是:

A & operator+=(A a1, const A & a2) { a1.a += a2.a; return a1; }
于 2013-01-29T23:27:31.483 回答