在类中实现的 C++ 友元函数无法访问私有

c++ friend function implemented in a class can't access privates

本文关键字:访问 函数 友元 实现 C++      更新时间:2023-10-16

我正在尝试定义两个类,在其中一个类中声明一个友元函数,并在另一个中实现它。事实上,我正试图准确地得到这篇文章中的发现:

如何仅为一个特定的函数和类声明友元函数?

我读了答案,觉得有道理。然后在我的代码中实现了它,它给了我错误:

编辑:

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

错误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

第页。S我试着评论上一篇文章,以免对此提出新的问题,但由于声誉不佳而无法发表评论(我是新来的)。

您缺少主函数。例如:

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

把它放在文件的底部,它就会编译。