为了账号安全,请及时绑定邮箱和手机立即绑定

error:不能引用Watch的默认构造函数,它是已经删除的函数?

#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;
class Watch;
class Time {
	friend Watch;
public:
	Time(int h, int m, int s) {
		hour = h;
		minute = m;
		second = s;
	}
	private:
	int hour;
	int minute;
	int second;
};
class Watch {
public:
	void print() {
		cout << t.hour << ":" << t.minute << ":" << t.second << endl;
	}
private:
	Time t;
	};
int main() {
	Time time(7, 8, 55);
	Watch w;//这里出现了问题
	w.print();
	system("pause");
	return 0;
}


正在回答

2 回答

楼上的代码有误啊,Watch(Time newt):t(newt){}

//这句是Watch的构造函数不假,但是给t赋值的时候用的其实是Time拷贝构造函数,

而Time并没有定义拷贝构造函数,所以不能这么写。

解决办法:1,定义一个Time的拷贝构造函数

                    例:Time(Time &_time):hour(_time.hour),minute(_time.minute),second(_time.second){}

                 2,把watch的构造函数改成接受三个形参,再把形参给Time

                    例:Watch(int a,int b,int c):t(a,b,c){}

0 回复 有任何疑惑可以回复我~
Watch(Time newt):t(newt){}    //不用默认的Watch构造函数,因为需要进行初始化(用带参数的构造函数)
Watch w(time);                //相应的,把主函数里的语句替换成用time去初始化对象的语句;


0 回复 有任何疑惑可以回复我~
#1

qq_啊你竟然丶_0

有误!!
2017-05-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之模板篇
  • 参与学习       91156    人
  • 解答问题       318    个

本C++教程力求即学即会,所有知识以实践方式讲解到操作层面

进入课程

error:不能引用Watch的默认构造函数,它是已经删除的函数?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信