我正在尝试定义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 我试着评论上一篇文章是为了不打开一个关于这个问题的新问题,但由于声誉低而无法发表评论(我是新来的)。
答案 0 :(得分:0)
您缺少主要功能。比如这个例如:
int main() {
one a;
two b;
b.accessboth(a);
}
将它放在文件的底部,它应该编译。