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

友元类的问题,为什么不能这样用,正确答案我知道 我只想问这样为什么是错的

友元类的问题,为什么不能这样用,正确答案我知道 我只想问这样为什么是错的

C++
流浪_老 2015-12-03 13:57:11
#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 反对 回复 2015-12-05
  • 1 回答
  • 0 关注
  • 1645 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信