gpt4 book ai didi

c++ - 非成员 += 在 C++ 中重载

转载 作者:行者123 更新时间:2023-11-30 04:21:17 24 4
gpt4 key购买 nike

#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: error: no match for 'operator+=' in '((B*)this)->B::a += ((B*)this)->B::at'

我做错了什么?

最佳答案

您定义的运算符是 A & operator+=(B &, A & ),而不是 A & operator+=(A &, A &)。所以你已经定义了如何将 A 添加到 B,但没有定义如何将 A 添加到 A。在 class A 的定义之后但在 class B 的定义之前试试这个:

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

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

关于c++ - 非成员 += 在 C++ 中重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14593884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com