我需要從class stos的方法「pop」中的類信息獲取私有數據的訪問權限。我知道我可以使用修改嵌套函數的特殊方法,但我認爲它不像使用「朋友」那樣是elegnat。我想將外部方法作爲嵌套類的朋友,但是我得到的信息是「不能重載單獨返回類型所忽略的函數」。是否有可能做到這一點?嵌套類C++,如何使外部方法作爲嵌套類的朋友
class stos
{
class info
{
int x;
bool isGood;
friend info pop(); // warning: cannot overload functions distungished by return type alone
};
static const int SIZE = 10;
int dane[SIZE];
bool isEmpty;
bool isFull;
int *top;
public:
stos();
info pop();
info push(int x);
};
編輯:
stos::info stos::pop()
{
info objInfo;
if (isEmpty == true)
{
objInfo.isGood = false;
return objInfo;
}
objInfo.isGood = true;
objInfo.x = *top;
top--;
return objInfo;
}
你用什麼編譯器?該代碼在VisualStudio GCC(從4.3到4.9)和最新的Clang ^^中編譯得很好。無論如何,你永遠不需要好的設計代碼中的「朋友」函數 – GameDeveloper
@DarioOO它編譯得很好,但不會生成'stos :: pop'朋友,但是沒有定義全局函數'pop'。如果你嘗試'friend info stos :: pop()',那麼你會得到'錯誤:使用不完整類型'class stos''。 – vsoftco
我知道。用戶發佈了一個代碼,它不會立即重現問題,如果我不知道如何通過顯示有問題的代碼片段來使用代碼,則無法提供更多幫助。 – GameDeveloper