#include <iostream>using namespace std;class Watch;/** * 定义Time类 * 数据成员:m_iHour, m_iMinute,m_iSecond * 成员函数:构造函数 * 友元类:Watch */class Time{ // 友元类 friend Watch;public: Time(int hour, int min, int sec) { m_iHour = hour; m_iMinute = min; m_iSecond = sec; }public: int m_iHour; int m_iMinute; int m_iSecond;};/** * 定义Watch类 * 数据成员:m_tTime * 成员函数:构造函数 * display用于显示时间 */class Watch{public: Watch(int x,int y,int z){ m_tTime.m_iHour=x; m_tTime.m_iMinute=y; m_tTime.m_iSecond=z;} void display() { cout << m_tTime.m_iHour << endl; cout << m_tTime.m_iMinute << endl; cout << m_tTime.m_iSecond << endl; }public: Time m_tTime;};int main(){ Time t(6, 30, 20); Watch w(10,20,30); w.display(); return 0;}
1 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
和friend没关系,你没有为Time类定义默认构造函数。
你在定义Time的时候定义了一个构造函数,所以编译器不会再为Time自动生成默认构造函数了。
而在Watch的构造函数Watch(int x,int y,int z)中,你没有用构造初始化列表的方式显式调用Time的构造函数,所以Watch的成员m_tTime会先被默认构造,编译器在发现并没有默认构造函数时就报错了。
你这两个类的所有成员都是public的,所以用不着friend也能相互访问。
- 1 回答
- 0 关注
- 1645 浏览
添加回答
举报
0/150
提交
取消