繁体   English   中英

执行运算符重载时 C++ 中的编译错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM