簡體   English   中英

在類中實現的C ++朋友功能無法訪問私有

[英]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.

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