我试图在互联网上找到解决方案,但我总是发现类、主函数等写在一个文件中的例子,而不是分开的。也许这就足够了,但我是 C++ 新手,我想我的问题是不同的,因为我为每个类使用不同的头文件和源文件,而为 main() 使用不同的源文件。
所以,问题是:我试图使 Box2 类中的 printBoxMeretek(Box) 函数成为 Box 类的友元函数。它不起作用,我不知道为什么。当我让整个 Box2 班级成为 Box 班级的朋友时,一切都很好。如果我只希望 printBoxMeretek(Box) 函数成为朋友,而不是整个 Box2 类,我该怎么办?
无论如何,错误消息表明问题在于 Box 类中的 boxSzelesseg 和 boxMagassag 变量是私有的。但据我所知,友元函数应该能够处理私有变量。
以下是我的测试文件的内容:
Box.h
#ifndef BOX_H
#define BOX_H
class Box
{
//friend function from Box2 [can be written anywhere: in private, in public,etc section] =>It does NOT work...why???
friend void printBoxMeretek(Box);
//make the whole Box2 class friend =>It works well.
// friend class Box2;
public:
};
#endif // BOX_H
框2.h
#ifndef BOX2_H
#define BOX2_H
#include <iostream>
#include <Box.h>
class Box2
{
public:
void printBoxMeretek(Box)
{ }
};
#endif // BOX2_H
感谢您的帮助。
friend void printBoxMeretek(Box);
这声明了一个自由函数是 Box 的朋友。你想让一个成员函数成为朋友,所以你应该声明一个这样的:
class Box2;
class Box
{
friend void Box2::printBoxMeretek(Box);
};
现在的问题是,您需要完整的类声明,因此:
class Box;
class Box2;
{
public:
void printBoxMeretek(Box);
};
class Box
{
friend void Box2::printBoxMeretek(Box);
};
无论您是在同一个标题中还是在其中两个标题中都有这个都没有关系 - 问题仍然存在(即您需要从 Box.h 中包含 Box2.h)。
旁注(感谢 Martin 的澄清):即使使用Box
class声明了一个函数,类的完整定义只需要在您定义或调用该函数时可用,因此它可以正常工作。您只需要确保在执行其中之一的任何地方都包含两个标头(或者始终包含 Box.h,它隐含地随 Box2.h 一起提供)。
不过,您可能更喜欢参考。你的盒子类在我看来并不像你真的打算在每次调用 print 函数时复制它们:
void Box2::printBoxMeretek(Box const& b);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句