我正在编写一个简单的程序来计算区域,我得到的错误是:
没有匹配功能可以拨打'
myclass::myclass()
'
我无法理解此错误的原因以及解决方法。
#include <iostream>
using namespace std;
class myclass{
int length;
int breadth;
public:
myclass(int x, int y);
int area(int x, int y);
};
myclass::myclass(int x,int y ){
length=x;
breadth=y;
}
int myclass::area(int x, int y){
return x*y;
}
int main()
{
myclass a;
a.area(3,4);
}
答案 0 :(得分:1)
您已经定义了一个构造函数,这意味着编译器不需要为您定义任何构造函数,包括默认构造函数。如果你正在使用C ++ 11,你可以添加:
myclass() = default;
如果不是:
myclass() : length(0), breadth(0) {}
到类声明/正文。
答案 1 :(得分:1)
在本声明中
myclass a;
应该调用类的默认构造函数,但是你没有定义默认的构造函数。
此外,成员函数区域没有重要意义,因为它不计算类的对象区域。
有效代码可能看起来像
#include <iostream>
class myclass
{
private:
int length;
int breadth;
public:
myclass(int x, int y);
int area() const;
};
myclass::myclass(int x,int y ) : length( x ), breadth( y )
{
}
int myclass::area() const
{
return length * breadth;
}
int main()
{
myclass a(3,4);
std::cout << "area = " << a.area() << std::endl;
}
你也可以用以下方式声明构造函数
myclass( int x = 0, int y = 0 );
在这种情况下,它将是默认构造函数。
答案 2 :(得分:0)
错误是因为没有默认构造函数而您正在尝试调用它。由于您已编写自己的构造函数,因此您已覆盖默认构造函数。一个建议是始终编写默认构造函数,或者在您的情况下,请确保不要调用默认构造函数。
以这种方式更改代码:
#include <iostream>
using namespace std;
class myclass{
int length;
int breadth;
public:
myclass(int x, int y);
int area(int x, int y);
};
myclass::myclass(int x,int y ){
length=x;
breadth=y;
}
int myclass::area(){
return length*breadth;
}
int main()
{
myclass a(3,4);
a.area();
}
答案 3 :(得分:0)
您已为您的班级定义了构造函数。这意味着编译器不会生成默认构造函数,即使您尝试在main中调用它也是如此。有两种解决方案:
从班级中删除自定义构造函数:
myclass(int x, int y);
但是,很可能你需要那个构造函数,所以只需使用你创建的构造函数中的参数来实例化类,如下所示:
int main()
{
myclass a;
a.area(3,4);
}
编辑:
我的思绪滑了一下,有第三种解决方案。使用BOTH构造函数。如果您认为您需要实例化该类而不将任何值分配给私有元素,那么这将是最佳解决方案:
public:
myclass();
myclass(int x, int y);