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

为什么会报错显示Match不是类或命名空间名称

class Time
{
 friend void Match::printTime(Time &t);
public:

 Time(int hour, int min, int sec)
 {
  m_iHour = hour;
  m_iMinute = min;
  m_iSecond = sec;
 }
private:
 int m_iHour;
 int m_iMinute;
 int m_iSecond;
};
class Match
{
public:
 void printTime(Time &t)
 {
  cout << t.m_iHour << "-" << t.m_iMinute << "-" << t.m_iSecond << endl;
 }
};
int main()
{
 Time t(6, 36, 25);
 Match m;
 m.printTime(t);
 system("pause");
 return 0;
}

正在回答

5 回答

#include <iostream>
using namespace std;
class Match;
class Time
{
    friend  Match;
public:

    Time(int hour, int min, int sec)
    {
        m_iHour = hour;
        m_iMinute = min;
        m_iSecond = sec;
    }
private:
    int m_iHour;
    int m_iMinute;
    int m_iSecond;
};
class Match
{
public:
    void printTime(Time &t)
    {
        cout << t.m_iHour << "-" << t.m_iMinute << "-" << t.m_iSecond << endl;
    }

};
int main()
{
    Time t(6, 36, 25);
    Match m;
    m.printTime(t);
    system("pause");
    return 0;
}    这个是友元类的实现方式只有在友元情况下 t.m_iMinute才是对的

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

#include <iostream>
using namespace std;
class Time
{
public:
    friend void printTime(Time &t);
    Time(int hour, int min, int sec)
    {
        m_iHour = hour;
        m_iMinute = min;
        m_iSecond = sec;
    }
private:
    int m_iHour;
    int m_iMinute;
    int m_iSecond;
};

    void printTime(Time &t)
    {
        cout << t.m_iHour << "-" << t.m_iMinute << "-" << t.m_iSecond << endl;
    }
 int main()
{
    Time t(6, 36, 25);
    
      printTime(t);
    system("pause");
    return 0;
}

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

那也是一样的   你最需要注意的是t.m_iHour这种写法是不对的  因为你的数据是私有的  实例化的对象是不能直接访问的

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

#include <iostream>
using namespace std;
class Match;
class Time
{
    friend Match;
public:

    Time(int hour, int min, int sec)
    {
        m_iHour = hour;
        m_iMinute = min;
        m_iSecond = sec;
    }
    void printTime()
    {
        cout << m_iHour << "-" << m_iMinute << "-" << m_iSecond << endl;
    }
private:
    int m_iHour;
    int m_iMinute;
    int m_iSecond;
};
class Match
{
public:
    /*void printTime(Time &t)
    {
        cout << t.m_iHour << "-" << t.m_iMinute << "-" << t.m_iSecond << endl;
    }*/
};
int main()
{
    Time t(6, 36, 25);
    /*Match m;
    m.printTime(t);*/
    t.printTime();
    system("pause");
    return 0;

}

改成这样或者也有其他改法,

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

是土土土呀 提问者

请问,如果我只想声明友元函数不想声明友元类呢?
2018-09-10 回复 有任何疑惑可以回复我~
#2

qq_慕尼黑8231991 回复 是土土土呀 提问者

同疑惑这个问题。。。
2019-01-22 回复 有任何疑惑可以回复我~

你这个有好几处问题

  1. 声明match类的友元函数时,应该先在类外声明Match;

  2. m_iHour是私有成员,你定义的time 对象也无法访问

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

举报

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

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

进入课程

为什么会报错显示Match不是类或命名空间名称

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