无法匹配调用`(矩形)(双,双)'

时间:2015-08-06 14:28:30

标签: c++

这是我的代码:

class rectangle
{
    double length,width;

public:
    rectangle()
    {
        length=0;
        width=0;
    }

    rectangle(double len,double wid)
    {
        length=len;
        width=wid;
    }

    double display()
    {
        return(length*width);
    }

    rectangle operator+(rectangle& rect)
    {
        rectangle recta;
        recta.length=this->length+rect.length;
        recta.width=this->width+rect.width;
        return rectangle(length,width);
    }
};

int main()
{
    rectangle rect1,rect2,rect3;
    rect1(7.0,8.9);
    rect2(11.4,12.8);
    rect3=rect1+rect2;
    cout<<rect1.display()<<endl;
    cout<<rect2.display()<<endl;
    cout<<rect3.display()<<endl;
    getch();
    return 0;
}

6 个答案:

答案 0 :(得分:1)

在声明对象时应该调用构造函数:

rectangle rect1(7.0, 8.9);

否则,你实际上并没有调用构造函数,而是运算符(),你没有在类中的某个地方定义,导致错误。

此外,+运算符的重载不正确,因为您返回此内容:return rectangle(length,width);,您应该实际返回recta,因为这是您应用运算符的对象。

把它们放在一起,你的程序应该是这样的:

#include <iostream>

using namespace std;

class rectangle
{
    double length,width;

public:
    rectangle()
    {
        length=0;
        width=0;
    }

    rectangle(double len,double wid)
    {
        length=len;
        width=wid;
    }

    double display()
    {
        return(length*width);
    }

    rectangle operator+(const rectangle& rect) const
    {
        rectangle recta;
        recta.length=this->length+rect.length;
        recta.width=this->width+rect.width;
        return recta;
    }
};

int main()
{
    rectangle rect1(7.0, 8.9), rect2(11.4,12.8), rect3;
    rect3=rect1+rect2;
    cout<<rect1.display()<<endl;
    cout<<rect2.display()<<endl;
    cout<<rect3.display()<<endl;
    return 0;
}

答案 1 :(得分:0)

rect1(7.0, 8.9);正在尝试查找您尚未实施的operator()(double, double)的重载。

您的意思是rectangle rect1(7.0, 8.9);等吗?这就是你如何调用构造函数

答案 2 :(得分:0)

该行:

rect1(7.0,8.9);

在您的矩形对象上调用operator(),但是您没有定义此运算符,这就是您收到该错误的原因。我想你想要做的就是调用构造函数,在实例化对象时你必须这样做:

rectangle rect1(7.0, 8.9);

答案 3 :(得分:0)

那里至少存在一个问题:

rectangle rect1,rect2,rect3;
rect1(7.0,8.9);
rect2(11.4,12.8);

您必须在定义对象的位置提供构造参数。否则,编译器会认为您正在调用函数。

rectangle rect1(7.0,8.9);
rectangle rect2(11.4,12.8);
rectangle rect3;

答案 4 :(得分:0)

您定义了一个构造函数,但正在尝试使用调用重载。

构造函数,与struct / class具有相同名称的方法,仅在最初构建事物时使用,通常在初始声明点处使用。你写道:

         rectangle rect1,rect2,rect3; 
         rect1(7.0,8.9); 
         rect2(11.4,12.8); 

第一行调用默认构造函数,然后构建矩形。下一行尝试将它们称为函数 - 因为它们已经被制作,它不再尝试构造。 (具体来说,它现在试图调用operator()(double,double)

要解决此问题,您应该在声明点初始化/构建它们:

rectangle rect1(7.0, 8.9);
rectangle rect2(11.4, 12.8);
rectangle rect3 = rect1 + rect2;

答案 5 :(得分:0)

该行

hashCode

不会调用String构造函数。它像函数一样调用rect1(7.0,8.9); ;从技术上讲,它正在调用rectangle。由于rect1没有这样的运算符,因此会出现编译错误。

如果要调用构造函数,则正确的语法是

rectangle::operator()