在类中实现的c ++ friend函数无法访问privates

时间:2014-01-18 09:37:42

标签: c++ friend friend-function

我正在尝试定义2个类,在其中一个中声明一个友元函数,然后在另一个中实现它。 我实际上试图得到这篇文章中的确切内容:

How can friend function be declared for only one particular function and class?

我读了答案并认为这是有道理的。 然后在我的代码中实现它,它给了我错误:

编辑:

错误1错误LNK2019:函数___tmainCRTStartup中引用了未解析的外部符号_main ... \ MSVCRTD.lib(crtexe.obj) - (通过添加main函数解决)

错误2错误LNK1120:1个未解析的外部... \ Debug \ Project.exe 1 1 .. - (通过添加main函数解决)

错误3智能感知:成员“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

P.S 我试着评论上一篇文章是为了不打开一个关于这个问题的新问题,但由于声誉低而无法发表评论(我是新来的)。

1 个答案:

答案 0 :(得分:0)

您缺少主要功能。比如这个例如:

int main() {
  one a;
  two b;
  b.accessboth(a);
}

将它放在文件的底部,它应该编译。