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

怎么成员函数的友员函数老是报错

如下:

MyTime.h
#include "Match.h"
class MyTime
{
    //friend void printTime(MyTime &t); //全局函数的友元函数    
    friend void Match::printTime(MyTime &t); //成员函数的友元函数
... }

Match.h
class MyTime; //成员函数的友元函数
class Match
{
    public:
        Match();
        virtual ~Match();
        void printTime(MyTime &t); //成员函数的友元函数

};

Match.cpp
void Match::printTime(MyTime &t)
{
    //cout << "Time: " << t1.m_iHour << ":" << t1.m_iMinute << ":" << t1.m_iSecond << endl;
    cout << t.m_iHour << endl;
}

main函数:
MyTime t(18,25,30);
Match m;
m.printTime(t);

错误是:


~\Match.cpp|18|error: invalid use of incomplete type 'class MyTime'|
include\Match.h|4|error: forward declaration of 'class MyTime'|

正在回答

5 回答

我觉得你应该在MyTime.h中 在MyTime类内容 开始前,加一行class Watch;

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

王业 提问者

也没有用,还是一样的报错。我试了一下,得到class Match的定义全部放到MyTime类的同一文件中,并且放在MyTime类的定义之前,就能通过编译。 但是如果单独新建一个类并有了一个新的文件Match.h和Match.cpp之后,即使我以MyTime类中include了这个Match.h,也过不了编译。
2016-12-17 回复 有任何疑惑可以回复我~
#2

王业 提问者

我已经把这一段的视频看过多次了,代码完全按视频中的写下来都不过。
2016-12-17 回复 有任何疑惑可以回复我~
#3

天津大学刘林炜 回复 王业 提问者

我用的VS2015,不知道你用的哪个?
2016-12-17 回复 有任何疑惑可以回复我~
#4

王业 提问者 回复 天津大学刘林炜

Code Blocks. 谢谢,来回改了无数次之后又通过了。现在我都不清楚开始时到底是什么问题了。:) 为了表示感谢,采纳之。
2016-12-18 回复 有任何疑惑可以回复我~
#5

_Gui_ 回复 天津大学刘林炜

我用vs2015代码和视频一样都有错误。。。。。
2017-05-01 回复 有任何疑惑可以回复我~
查看2条回复
  1. 类声明完别忘记加";"

  2. 在Match.cpp 中需要包含头文件“Match.h”& "Time.h"

  3. 在demo.cpp 中也需要包含头文件“Match.h”&“Time.h”

    我的是可以pass的。

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

在Match.cpp中加一条代码

#include "Time.h"

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

表示我也没有过

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

 friend void Match::printTime(MyTime &t); //成员函数的友元函数

这一行应该写在MyTime类中

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

王业 提问者

是写在 MyTime类中的吧,上面应该体现出来了的。
2016-12-17 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

怎么成员函数的友员函数老是报错

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