c++ - 为什么范围解析运算符在类外给出错误?

标签 c++

我想在类外使用运算符重载。我在文档中读到,当我们在类外使用它时,我们可以将两个对象作为参数。当我在类外使用范围解析运算符定义它时,它会给我错误。我想知道原因

class Rectangle
{
public:
int L;
int B;

Rectangle()    //default constructor
{
    L = 2;
    B = 2;
}

Rectangle(int l,int b)      //parametrized constructor
{
    L = l;
    B = b;
}   
void Display()
{
cout<< "length is " << L <<endl;
cout<< "breadth is " << B <<endl;
}                             

};

Rectangle Rectangle:: operator+ (Rectangle obj1,Rectangle obj2)    
{
Rectangle obj3;

obj3.L = obj1.L + obj2.L;
obj3.B = obj1.B + obj2.B;
return obj3;

}

int main()
{
Rectangle R1;
R1.Display();

Rectangle R2(5,3);
R2.Display();

Rectangle R3 ;
R3 = R1+ R2;
R3.Display();

return 0;
}

最佳答案

你已经快搞定了。双参数形式实际上是一个自由函数,它会被 ADL 找到,而不是成员:

Rectangle operator+ (Rectangle obj1,Rectangle obj2)    
{
Rectangle obj3;

obj3.L = obj1.L + obj2.L;
obj3.B = obj1.B + obj2.B;
return obj3;

}

关于c++ - 为什么范围解析运算符在类外给出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46860997/

相关文章:

c++ - shared_ptr 不会在程序结束时破坏对象

c++ - ‘cout’ 没有命名类型

c++ - 如何循环链表以减少值?

c++ - QtConcurrent::map 不接受参数

c++ - 是否可以将功能卸载到显卡?

c++ - 如果我设置优化-O3,是否在 gcc 中完成了 C++ 整个程序优化?

c++ - 谷歌机器人信息?

c++ - 链表析构函数

c++ - Node.js 原生插件中的枚举类型

c++ - 使用 lambda 函数处理 C++ libsigc++ 信号