[英]Compilation error in C++ while performing operator overloading
我正在学习 c++ 并在执行运算符重载时遇到编译错误。 我附上我的代码。 请看一看。 错误位于第 27 行。我尝试进行更改,但由于我对 c++ 完全陌生,因此无法解决此问题。 我们在 C 中没有这样的东西。 另外,建议我一些提高编码标准和技能的好方法。
#include <iostream>
#include<string>
#include <string.h>
#include <stdlib.h>
using namespace std;
class rectangle
{
private:
int l,b;
public:
// friend
rectangle(int,int);
rectangle(rectangle &r);
void setL(int);
void setB(int);
int getL();
int getB();
int area();
int parameter();
void isSquare();
rectangle operator + (rectangle r1)
{
rectangle temp; // compilation error here ///////Line No 27:
temp.l=r1.l+l;
temp.b=r1.b+b;
return temp;
}
// void ~rectangle();
};
void rectangle:: isSquare()
{
if(l==b)
cout<<"It is square"<<endl;
else
cout<<"It is rectangle"<<endl;
}
rectangle:: rectangle(int length =0, int breadth =0)
{
setL(length);
setB(breadth);
}
rectangle:: rectangle(rectangle &r)
{
setL(r.l);
setB(r.b);
}
void rectangle::setL(int length)
{
if(length>0)
l=length;
else
l=0;
}
void rectangle::setB(int breadth)
{
if(breadth>0)
b=breadth;
else
b=0;
}
int rectangle::getL()
{
return l;
}
int rectangle::getB()
{
return b;
}
int rectangle::area()
{
return l*b;
}
int rectangle::parameter()
{
return 2*l*b;
}
//extern void print(char *s);
int main()
{
cout<<("Welcome to test codes!!! :) :) \n");
rectangle r(10,5);
rectangle r1(2,5);
rectangle r2;
cout<<"r "<<r.area()<<' '<<r.parameter()<<endl;
cout<<"r1 "<<r1.area()<<' '<<r1.parameter()<<endl;
cout<<"r2 "<<r2.area()<<' '<<r2.parameter()<<endl;
r.isSquare();
r2=r+r1;
cout<<"r2 "<<r2.area()<<' '<<r2.parameter()<<endl;
return 0;
}
错误是 main.cpp:32:19:错误:没有匹配的 function 调用 'rectangle::rectangle()' 矩形温度;
看看你的构造函数
rectangle(int,int);
rectangle(rectangle &r);
一个接受两个整数,一个接受另一个矩形。 所以这意味着要构建一个矩形,您必须提供两个整数或另一个矩形。
现在查看有错误的行
rectangle temp;
这里提供了什么? 当然没有,但是你没有没有 arguments 的构造函数,所以这是一个编译错误。
查看您的代码,最好的解决方案是这个
rectangle temp(r1.l+l, r1.b+b);
return temp;
现在提供了两个整数。
顺便说一句,您的代码显示完全缺乏对const
的认识。 除非您了解这一点,否则您很快就会遇到麻烦。
线
rectangle temp; // compilation error here ///////
正在尝试创建一个没有任何构造函数参数的“矩形”的新实例。 您的 class 没有不带参数的构造函数,这就是您收到错误的原因。 它与您的运营商无关。
你需要使用:
rectangle temp(0, 0);
或者,创建一个不带参数的构造函数:
在 header
rectangle();
在源文件中
rectangle:: rectangle() {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.