类朋友的C ++变量范围

时间:2013-05-14 23:37:39

标签: c++ scope friend

我有:

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

  • windows.cpp //我在哪里创建我的游戏对象并通过我的hWnd。
  • Game.cpp / Game.h
  • Font.cpp / Font.h
  • D3DGraphics.cpp / D3DGraphics.h
  • Viewport.cpp / Viewport.h

2 个答案:

答案 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.hFont.h是循环相关的,Font.h没有包含警戒;首先包括它会包含两次,这可能会导致编译器抱怨重新定义class Font