簡體   English   中英

好友功能和受保護的數據

[英]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數組?

成員變量存在於實例(對象)內部。 它們也稱為“實例變量”。 如果沒有該類的實例,則沒有實例變量。

mSetValueScoreBoard的成員變量。 因此, ScoreBoard::mSetValue實例僅存在於ScoreBoard實例中。

如何正確設置友誼,以便ValueSet可以訪問mSetValue數組?

void ValueSet()函數中,您沒有ScoreBoard任何實例。 您不能訪問ScoreBoard::mSetValue不管其訪問說明符或友好關系-因為它不存在。 您需要的是ScoreBoard一個實例。

我在ScoreBoard類中使用了此函數,因此無法在其中創建ScoreBoard的任何實例

沒有什么能阻止你從創建的實例ScoreBoard的成員函數內的ScoreBoard 盡管在ScoreBoard的成員函數中您已經可以訪問實例(由this指向),所以可能不需要創建新實例。 您應該做什么取決於您的意圖。

根據您的評論,我懷疑成員函數比自由函數更適合您。

為了簡化起見,我使用通用術語“成員變量”來指代非靜態成員變量。 靜態成員變量是不同的。 它們也稱為類變量。

朋友功能不是該類的成員。 所以你的情況,如果你想使用mSetValueValueSet那么你必須提供一些訪問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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM