C ++好友函数引用

时间:2010-10-26 23:05:08

标签: c++ forward-declaration

我有这种情况(两个类有两个不同的头文件):

b.h

#include "a.h"

class B {
      friend void  B* A::create(void);
   private:
     int x;
};

A.H

#include "b.h"

class A {
   public:
     void B* create(void);
   ...
};

基本上A类创建“B”对象。我想给创建函数create()访问权限来修改类B的私有成员'x'。我想在C#中模拟'internal'关键字,但是更细粒度。

我遇到的问题是我最终得到了一个循环标题引用。 b.h想要在a.h之后来,但a.h想要在b.h之后来。这样做的正确方法是什么?我需要求助于void * ptrs吗?由于我只创建一种类型的对象,我认为我不需要工厂模式。希望我错过了一些简单的东西。

1 个答案:

答案 0 :(得分:2)

您需要的是“前瞻性声明”。基本上你没有在其他类的标题中包含类的标题(除非你想使用组合,然后你必须)。在你的情况下,它看起来像这样:

// B.h
class A;
class B {
    // declare pointers to A freely
};

反过来说A.h。

你可能需要在B.cpp中包含A.h(反之亦然),以便能够实际取消引用那些访问字段的指针,但是你的圆形包含问题现在已经消失了。