我有两个班:A和B.
我想:
- A类指向B
的指针
- B类可以访问A
在尝试编译时,我得到了一个包含这样的十几个奇怪错误的列表:
"错误C2614:' A' :非法成员初始化:' b_ptr'不是基地或会员。"
如何消除它们?
总体情况:A类 - 它是一个大实体,B类 - 它是一个辅助类,分别读取输入文本文件和A类设置。这个OOD可能有问题吗?
" A.H":
#include "B.h"
class A
{
// friend class B;
public:
A() : b_ptr(new B(this)){};
private:
int a_1;
int a_2;
private:
B* b_ptr;
};
" B.h":
#include "A.h"
class B
{
public:
B(A*const a) : a_ptr(a) {};
private:
A* const a_ptr;
};
答案 0 :(得分:1)
您拥有头文件的循环依赖关系而不包含防护。
一种可能的解决方案
你的" B.h"只需要一个前瞻性声明。改为:
class A;
class B
{
public:
B(A*const a) : a_ptr(a) {};
private:
A* const a_ptr;
};