-1

我有:

class Game... 
class D3DGraphics...

我在我的 Game 类中声明了一个名为 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

  • windows.cpp // 我在这里创建我的游戏对象并传递我的 hWnd。
  • 游戏.cpp / 游戏.h
  • 字体.cpp / 字体.h
  • D3DGraphics.cpp / D3DGraphics.h
  • 视口.cpp / 视口.h
4

2 回答 2

0

如果您的代码看起来像

class Font {
  ...
  friend class D3DGraphics;
  ...
}

那么没有它就行不通

class D3DGraphics {
  ...
  friend class Font;
  ...
}

友谊不是互惠的。如果A声明B了朋友,A则对象不会获得对象的特殊特权B

顺便说一句,文件的内容在Font.h哪里?文件已经出现,支持我的假设。)

此外,D3DGraphics.hFont.h是循环依赖的,并且Font.h没有包含保护;首先包含它会包含它两次,这可能会导致编译器抱怨重新定义class Font.

于 2013-05-14T23:53:52.167 回答
0

至少如果理解正确,你期望友谊是传递性的——即 A 是 B 的朋友,B 是 C 的朋友,所以你期望 A 是 C 的朋友。

如果是这样,简单的答案是因为(正如 C++ 定义的那样)友谊是不及物的。

于 2013-05-14T23:51:32.593 回答