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 &)。したがって、 を に追加する方法は定義されていますが、 を に追加する方法は定義されていAませBん。の定義の後、 の定義の前にこれを試してください:AAclass Aclass 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 に答える