C++:不存在默认构造函数?

代码如下//head.h#include<iostream>#include<cmath>usingnamespacestd;classpoint{friendclass... 代码如下
//head.h
#include<iostream>#include<cmath>using namespace std;class point{friend class dis;private: int X; int Y;public: point(int x,int y) {X=x;Y=y;} void show() {cout<<X<<","<<Y<<endl;}};class dis{private: point A; point B;public: dis(point a,point b) {A=a;B=b;} void showdis() {cout<<sqrt(double((A.X-B.X)*(A.X-B.X)+(A.Y-B.Y)*(A.Y-B.Y)))<<endl;}};
错误图片如下:
就算是我初始值,那还是同样的错误
point(int x,int y):X(0),Y(0)
{X=x;Y=y;}
为什么改成
point(int x=0,int y=0) {X=x;Y=y;}
就可以了呢》我是初学者
展开
 我来答
帐号已注销
高粉答主

2020-05-20 · 每个回答都超有意思的
知道答主
回答量:2169
采纳率:0%
帮助的人:35.9万
展开全部

C++:不存在默认构造函数,是代码错误造成的,解决方法如下:

1、首先在C语言中,对象复制时,只对对象中的数据成员进行简单的赋值,如下图所示。

2、若类中没有拷贝构造函数,编译器会自动产生一个默认拷贝构造函数,类似如下图。

3、若对象中有动态成员,需要重新分配空间赋值。如下图所示。

4、声明一个私有拷贝构造函数可以防止默认拷贝动作发生,如下图所示。

5、最后这个声明一个私有拷贝构造函数可以防止默认拷贝动作发生完成后,如下图所示就可以了。

血色锋芒
推荐于2018-02-27
知道答主
回答量:8
采纳率:0%
帮助的人:4.2万
展开全部
point类中你定义了构造函数 point(int x,int y){X=x;Y=y;},这样系统就不会再提供默认的构造函数point(){},而没有了point(){}这个构造函数,dis类中的构造函数dis(point a,point b)中,参数a和b的构造自然会失败(类中没有对应的无参构造函数)。
追问
可是,如果在main函数中执行
point a,b;
a=b;
这些让point两个对象相等的命令也是可以执行的啊,怎么就没有复制构造函数呢?
追答
不应该的,point a,b;这句话编译时,编译器就应该提示你没有可用的构造函数了,也就是说当你在类中没写任何的构造函数,系统会提供一个无参的构造函数,此时point a;这样的定义是合法的,但当你定义了point(int x,int y){X=x;Y=y;}时,系统就不会再为你准备默认构造函数,此时point a;这样的定义格式,系统就找不到与之匹配的构造函数,就编译出错了。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
二天有
2013-07-25 · TA获得超过428个赞
知道小有建树答主
回答量:198
采纳率:0%
帮助的人:89.4万
展开全部
是因为你定义point的构造时没有定义默认构造函数,所以,如果你一定要用point(int x,int y){X = x; Y = y;}
那么可以改成这样point( int x = 0, int y = 0){X = x; Y = y;},这样定义后,你的A= a ;就不会报错了。最好在point构造函数后加一下point operator = ( const point & p ){ X = p.X; Y = p.Y; return *this; },这样就用担心调用拷贝对象时出错了。C++ 语法是这样说的,如果没有定义构造函数,编译器会提供默认构造,但是,如果自己定义了构造函数,编译系统将不在为该类提供默认构造函数。
追问
默认构造函数不是已经有了么?
point(int x,int y)
{X=x;Y=y;}
这个不就是构造函数了?默认?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友455632d898
2013-07-25 · TA获得超过275个赞
知道小有建树答主
回答量:804
采纳率:0%
帮助的人:337万
展开全部
dis() {} 的构造函数一定有的。这个构造函数不存在默认,但是存在默认其他构造函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dfdglei
推荐于2017-12-15 · TA获得超过1195个赞
知道小有建树答主
回答量:747
采纳率:100%
帮助的人:752万
展开全部
point(int x,int y)
改成
point(int x = 0,int y = 0)

或者在这前面添加一句
point(){}
追问
真的可以啊!可是为什么这样的呢?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式