我想实现关联I C ++,但是我收到了几个错误,我无法解决它们。
Class A{
public: //methods
private:
B * b_obj;
};
Class B{
public: //methods
private:
A * a_obj;
}
这两个类都在单独的文件中。即A.h
,A.cpp
,B.h
和B.cpp
。
VS2012给出了错误
错误C2061:A
答案 0 :(得分:2)
您需要转发声明类:
A.H:
class B;
class A {
public:
// methods
private:
B* b_obj;
};
B.h
class A;
class B {
public:
// methods
private:
A* a_obj;
};
答案 1 :(得分:1)
这种特殊的交叉引用情况可以通过多种方式处理。
假设你不能让Ah包含Bh和Bh包含Ah,因为当最多包含一次标题时,一个将始终包含在另一个之前,最简单的解决方案就是使用forward references:< / p>
<强> A.H 强>
class B;
class A {
B* bObj;
}
<强> A.cpp 强>
#include "A.h"
#include "B.h"
...
<强> B.h 强>
class A;
class B {
A* aObjM;
}
<强> B.cpp 强>
#include "B.h"
#include "A.h"
...
这个简单的解决方案不允许您在A
中使用B.h
规范(例如调用方法),反之亦然,也不允许您存储具体实例(A
在B类中vs A*
),但听起来不像你的情况。
答案 2 :(得分:0)
您对每个文件有哪些包含声明?从你拥有的东西来看,前瞻宣言似乎对你有用。
// A.h
#includes without B.h
class B;
class A {
public:
// whatever
private:
B * b_obj;
};
// B.h
#includes without A.h
class A;
class B {
public:
// whatever
private:
A *a_obj;
};