[英]Friend function and protected data
我有課
class ScoreBoard: public die
{ //..//
protected:
bool mSetValue[6];
public:
//...//
friend void ValueSet();
};
我想利用這種友誼來訪問mSetValue
。 因此,我在ScoreBoard.cpp
是:我void ValueSet();
定義了一個void ValueSet();
),然后按以下方式定義它:
void ValueSet()
{ char lPick;
std::cin >> lPick;
if (lPick == 1) mSetValue[0] = true; }
但是調試器說:
未在此范圍內聲明“ mSetValue”。
因此,我的問題是-如何正確設置友誼,以便ValueSet
可以訪問mSetValue
數組?
成員變量†存在於實例(對象)內部。 它們也稱為“實例變量”。 如果沒有該類的實例,則沒有實例變量。
mSetValue
是ScoreBoard
的成員變量。 因此, ScoreBoard::mSetValue
實例僅存在於ScoreBoard
實例中。
如何正確設置友誼,以便ValueSet可以訪問mSetValue數組?
在void ValueSet()
函數中,您沒有ScoreBoard
任何實例。 您不能訪問ScoreBoard::mSetValue
不管其訪問說明符或友好關系-因為它不存在。 您需要的是ScoreBoard
一個實例。
我在ScoreBoard類中使用了此函數,因此無法在其中創建ScoreBoard的任何實例
沒有什么能阻止你從創建的實例ScoreBoard
的成員函數內的ScoreBoard
。 盡管在ScoreBoard
的成員函數中您已經可以訪問實例(由this
指向),所以可能不需要創建新實例。 您應該做什么取決於您的意圖。
根據您的評論,我懷疑成員函數比自由函數更適合您。
†為了簡化起見,我使用通用術語“成員變量”來指代非靜態成員變量。 靜態成員變量是不同的。 它們也稱為類變量。
朋友功能不是該類的成員。 所以你的情況,如果你想使用mSetValue
在ValueSet
那么你必須提供一些訪問mSetValue
通過一個實例類或“對象”。 這可以通過將ValueSet()
函數聲明為
friend void ValueSet(ScoreBoard &sb);
和你的定義為
void ValueSet(ScoreBoard &sb)
{
char lPick;
std::cin >> lPick;
if (lPick == 1)
sb.mSetValue[0] = true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.