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

为什么将2个类放在同一个.cpp文件会出现错误呢

#include<iostream>

#include<string>

using namespace std;


class time

{

friend void printTime(time &t);//将printTime声明为time的友元函数

public:

time(int hour, int min, int sec)

{

this->hour = hour;

this->min = min;

this->sec = sec;

cout << "class time start" << endl;

}

private:

int hour, min, sec;

};

class match

{

public:

friend void printTime(time &t)

{

cout << t.hour << ":" << t.min << ":" << t.sec << endl;

}


};

int main()

{

time t(12, 0, 0);

match m;

m.printTime(t);

return 0;

}


正在回答

2 回答

你这代码问题很多,首先声明友元函数时,需要指出哪个类的成员函数作友元,即 friend Match::printTime(Time &t);之后F5会出现编译错误,原因在于Match未声明,即在class Time{}前声明class Match; 之后F5编译出现错误,原因是虽然声明了Match但编译器不知道printTime是Match的成员函数,因此应该先编写类Match,再编写类Time,其中由于编写类Match时有void printTime(Time &t),所以需要先声明Time即classTime,此外一定要注意先声明,后使用

正确代码:

#include<iostream>

using namespace std;

class Time;

class Match

{

public:

void printtime(Time &t);

};

class Time 

{

friend void Match::printtime(Time &t);

public:

Time(int hour, int min, int sec);

private:

int m_ihour;

int m_imin;

int m_isec;

};

void Match::printtime(Time &t)

{

cout << t.m_ihour << ":" << t.m_imin << ":" << t.m_isec << endl;

}

Time::Time(int hour, int min, int sec)

{

m_ihour = hour;

m_imin = min;

m_isec = sec;

}


int main(void)

{

Time time(19, 58, 10);

Match c;

c.printtime(time);

system("pause");

return 0;

}


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

class match  类中 friend void printTime(time &t), 多了个 friend  关键字

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

举报

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

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

进入课程

为什么将2个类放在同一个.cpp文件会出现错误呢

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