C++类的对重载函数的调用不明确 解释下下面的程序
答案:3 悬赏:0
解决时间 2021-03-07 15:14
- 提问者网友:迷茫庸人
- 2021-03-06 17:29
#include
using namespace std;
class demo
{
public:
demo(){x=0;cout<<"demo的默认构造函数!"< demo(int i){x=i;cout<<"demo的带一个参数的构造函数!"< ~demo(){cout<<"demo的默认析构函数!"< int get(){return x;}
void set(int i){x=i;}
private:
int x;
};
class rectangle
{
public:
rectangle(){x=1000;cout<<"rectangle的默认构造函数!"< rectangle(int i=0,int j=0,int k=0):x(i),width(j),length(k)
{
cout<<"rectangle的带三个参数的构造函数!"<<"长方形b的面积为:"< }
~rectangle(){cout<<"rectangle的默认析构函数!"< int area(){return length.get()*width.get();}
private:
demo length;
demo width;
int x;
};
int main()
{
// rectangle a(100,200,300);//这样是对的,我知道是调用带参数的构造函数
rectangle a;//这样不是应该是调用不带参数的构造函数么。为什么会出错呢。就是出现在这里,高人请指教。
return 0;
}
//错误原因 error C2668: “rectangle::rectangle”: 对重载函数的调用不明确
运行环境为visual studio 2008
最佳答案
- 二级知识专家网友:猖狂的痴情人
- 2021-03-06 18:13
简单一点,rectangle a; 这个定义产生了冲突,它既可以调用 rectangle(int i=0,int j=0,int k=0)进行构造也可调用rectangle()进行构造。这两个构造函数对rectangle a;并没有优先关系,因此系统不能识别该调哪个函数。
不建议楼主的rectangle(int i=0,int j=0,int k=0)这个构造函数,这样写没多大意义,一般来说如果要使用默认的参数,只提供部分的默认参数,而不是全部提供。
全部回答
- 1楼网友:何必打扰
- 2021-03-06 21:11
rectangle(int i=0,int j=0,int k=0):x(i),width(j),length(k)
你这个函数每个参数都有默认值,就是说不提供参数也可以调用这个函数,所以在调用上与不带参数的默认构造函数冲突,故会产生此编译错误。
- 2楼网友:ー何必说爱
- 2021-03-06 19:51
c++中sqrt参数一个是float,另一个是double。你调用的时候sqrt(num)中num是int型的,你将num换成double或float类型就行了.
我要举报
大家都在看
推荐资讯