Ошибка компиляции в C ++ при выполнении перегрузки операторов - PullRequest
0 голосов
/ 08 апреля 2020

Я изучаю 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;
}

Ошибка является основной. cpp: 32: 19: ошибка: нет соответствующей функции для вызова функции rectangle :: rectangle () rectangle temp;

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Посмотрите на ваши конструкторы

rectangle(int,int);
rectangle(rectangle &r);

Тот, который принимает два целых числа, а другой - другой прямоугольник. Таким образом, это означает, что для построения прямоугольника необходимо указать либо два целых числа, либо другой прямоугольник.

Теперь посмотрите на строку с ошибкой

rectangle temp;

Что здесь предусмотрено? Конечно, ничего, но у вас нет конструктора без аргументов, так что это ошибка компиляции.

Глядя на ваш код, лучшим решением будет это

    rectangle temp(r1.l+l, r1.b+b);
    return temp;

Теперь два целых числа

Кстати, ваш код показывает полное отсутствие информации о const. Вы быстро столкнетесь с неприятностями, если не узнаете об этом.

1 голос
/ 08 апреля 2020

Строка

rectangle temp; // compilation error here ///////

пытается создать новый экземпляр «прямоугольника» без каких-либо параметров конструктора. В вашем классе нет конструктора, который не принимает параметров, поэтому вы получаете ошибку. Это не имеет никакого отношения к вашему оператору.

Вам необходимо использовать:

rectangle temp(0, 0);

Или создать конструктор, не имеющий параметров:

в заголовке

rectangle();

в исходном файле

rectangle:: rectangle() {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...