亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么會報錯顯示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++遠征之模板篇
  • 參與學習       91140    人
  • 解答問題       325    個

本C++教程力求即學即會,所有知識以實踐方式講解到操作層面

進入課程

為什么會報錯顯示Match不是類或命名空間名稱

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號