[英]c++ friend function implemented in a class can't access privates
我正在嘗試定義2個類,在其中一個中聲明一個好友函數,並在另一個中實現它。 我實際上是在嘗試獲得本帖子中發現的確切信息:
我閱讀了答案,並認為這是有道理的。 然后在我的代碼中實現它,它給了我錯誤:
編輯:
錯誤1錯誤LNK2019:函數___tmainCRTStartup ... \\ MSVCRTD.lib(crtexe.obj)中引用的未解析的外部符號_main- (通過添加主函數來解決)
錯誤2錯誤LNK1120:1個未解析的外部組件... \\ Debug \\ Project.exe 1 1 ..-- (通過添加主函數來解決)
錯誤3 IntelliSense:成員“ one :: data1”(在第19行聲明)無法訪問... \\ Friends.cpp- (即使在清理和重建項目后仍然存在)
我認為這可能與我的實現方式有關,因此我對答案中的代碼進行了復制粘貼:
class one;
class two
{
private:
int data2;
public:
two()
{
data2 = 200;
}
// this goes fine, because the function is not yet defined.
int accessboth(one a);
};
class one
{
private:
int data1;
public:
one()
{
data1 = 100;
}
friend int two::accessboth(one a);
};
// don't forget "inline" if the definition is in a header.
inline int two::accessboth(one a)
{
return (a.data1 + (*this).data2);
}
但是我在同一地方遇到了相同的錯誤: a.data1 無法訪問
然后,我搜索並找到了更多建議采用相同技術解決問題的示例,但它們都在同一地方給了我相同的無法訪問的錯誤...
有什么我想念的嗎? 提供的示例(以前的帖子中建議的解決方案)應該可以工作嗎? 規范中有什么變化嗎?
感謝您的任何幫助。 d
PS我嘗試對上一篇文章發表評論,以便不對此提出新的問題,但是由於聲譽低下而無法發表評論(我是新來的)。
您缺少主要功能。 像這樣一個例子:
int main() {
one a;
two b;
b.accessboth(a);
}
把它放在文件的底部,它應該編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.