这是我的代码:
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;
}
答案 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()