C++ 为什么作用域解析运算符在类外给出错误?

C++ 为什么作用域解析运算符在类外给出错误?,c++,C++,我想在类外使用运算符重载。我在文档中读到,当我们在类外使用它时,我们可以给出两个对象作为参数。当我在类外使用范围解析运算符定义它时,它给了我错误。我想知道原因 class Rectangle { public: int L; int B; Rectangle() //default constructor { L = 2; B = 2; } Rectangle(int l,int b) //parametrized constructor { L =

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

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;
}
类矩形
{
公众:
int L;
int B;
矩形()//默认构造函数
{
L=2;
B=2;
}
矩形(intl,intb)//参数化构造函数
{
L=L;
B=B;
}   
无效显示()
{

cout你几乎明白了。双参数形式实际上是一个自由函数,ADL将找到它,而不是成员:

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

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

}

对于二进制运算符,可以声明为具有一个参数的成员函数,也可以声明为具有两个参数的“自由函数”。