我有:
class Game...
class D3DGraphics...
我的游戏类中有一个名为gfx的D3DGraphics类型的变量。
我又做了几节课:
class Font...
class Viewport...
我让他们成为D3DGraphics的朋友并在D3DGraphics类中声明变量:
Font font;
Viewport viewport;
最后在我的D3DGraphics中,我公开了一个变量:
LPDIRECT3DDEVICE9 d3dDevice;
我的字体类看不到d3dDevice,即使它是D3DGraphics的朋友?
为什么?
编辑:: //现在改变了代码,将指针推送到外部类: https://github.com/jimmyt1988/TheGame/tree/master/TheGame
答案 0 :(得分:0)
至少如果理解正确,你期待友谊是传递性的 - 即A是B的朋友而B是C的朋友,所以你期待A成为C的朋友。
如果是这样,简单的答案是因为(正如C ++定义的那样)友谊不是传递性的。
答案 1 :(得分:0)
如果您的代码看起来像
class Font {
...
friend class D3DGraphics;
...
}
然后没有
就无法运作class D3DGraphics {
...
friend class Font;
...
}
Friendship is not reciprocal.如果A
声明B
朋友,则A
个对象不会获得B
个对象的特权。
(顺便说一下,该文件已经出现,并支持我的假设。)Font.h
的内容在哪里?
此外,D3DGraphics.h
和Font.h
是循环相关的,Font.h
没有包含警戒;首先包括它会包含两次,这可能会导致编译器抱怨重新定义class Font
。