0

我正在尝试定义 2 个类,在其中一个中声明一个友元函数并在另一个中实现它。我实际上是在尝试准确地了解在这篇文章中发现的内容:

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

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

编辑:

Error 1 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup ...\MSVCRTD.lib(crtexe.obj) - (通过添加main函数解决)

Error 2 error LNK1120: 1 unresolved externals ...\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我尝试对上一篇文章发表评论,以免对此提出新问题,但由于声誉低而无法发表评论(我是新来的)。

4

1 回答 1

0

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

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

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

于 2014-01-18T10:15:20.557 回答