猿问

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

#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;

}


流浪_老
浏览 1651回答 1
1回答

onemoo

和friend没关系,你没有为Time类定义默认构造函数。你在定义Time的时候定义了一个构造函数,所以编译器不会再为Time自动生成默认构造函数了。而在Watch的构造函数Watch(int x,int y,int z)中,你没有用构造初始化列表的方式显式调用Time的构造函数,所以Watch的成员m_tTime会先被默认构造,编译器在发现并没有默认构造函数时就报错了。你这两个类的所有成员都是public的,所以用不着friend也能相互访问。
随时随地看视频慕课网APP
我要回答