首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 友元函數無法訪問私有成員:函數名拼寫錯誤導致的編譯錯誤

     編輯:程式設計疑難解答

錯誤代碼片段


class Time {
    friend void display(Time &, Date &); // 聲明 display
};
class Date {
    friend void display(Time &, Date &); // 聲明 display
};
void dispaly(Time & t, Date & d) {  // 定義時寫成 dispaly (少一個 'i')
    cout << d.month << "/" << d.day << "/" << d.year << endl;
    cout << t.hour << ":" << t.minute << ":" << t.sec << endl;
}

編譯器報錯


error: 'void dispaly(Time&, Date&)' is not a friend of 'Time'
error: 'void dispaly(Time&, Date&)' is not a friend of 'Date'

根因

函數名拼寫不一致:類內聲明 display,類外定義 dispaly。編譯器視為兩個不同函數,類外定義的 dispaly 自然不是友元。

修正


void display(Time & t, Date & d) { // 改正拼寫
    cout << d.month << "/" << d.day << "/" << d.year << endl;
    cout << t.hour << ":" << t.minute << ":" << t.sec << endl;
}

友元機制補充

  • friend void display(Time&, Date&); 僅是聲明,承諾「存在一個名為 display 的全局函數,允許訪問本類私有成員」。
  • 定義必須完全匹配簽名(返回類型、函數名、參數列表)。
  • 友元函數不屬於類的成員,調用時直接 display(t, d),無需對象。
  • 友元破壞封裝,慎用;優先考慮公有 getter/setter。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved