0

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

bh

#include "a.h"

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

#include "b.h"

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

基本上A类创建“B”对象。我想授予创建函数 create() 访问权限以修改 B 类的私有成员“x”。我想模拟 C# 中的“内部”关键字,但在更精细的级别上。

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

4

1 回答 1

2

您需要的是“前向声明”。基本上你不会在其他类的标题中包含类的标题(除非你想使用组合,那么你必须这样做)。在你的情况下,它看起来像这样:

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

反过来在啊

您可能需要在 B.cpp 中包含 Ah (反之亦然)才能真正取消引用这些指向访问字段的指针,但是您的循环标头包含问题现在已经消失了。

于 2010-10-26T23:08:24.070 回答