我想实现关联 I C++,但我遇到了几个错误,我无法解决它们。
Class A{
public: //methods
private:
B * b_obj;
};
Class B{
public: //methods
private:
A * a_obj;
}
这两个类都在单独的文件中。即A.h
,和. A.cpp
_ VS2012 给出错误 Error C2061: syntax error near AB.h
B.cpp
我想实现关联 I C++,但我遇到了几个错误,我无法解决它们。
Class A{
public: //methods
private:
B * b_obj;
};
Class B{
public: //methods
private:
A * a_obj;
}
这两个类都在单独的文件中。即A.h
,和. A.cpp
_ VS2012 给出错误 Error C2061: syntax error near AB.h
B.cpp
您需要前向声明类:
啊:
class B;
class A {
public:
// methods
private:
B* b_obj;
};
溴化氢
class A;
class B {
public:
// methods
private:
A* a_obj;
};
这种特定的交叉引用情况可以通过多种方式处理。
假设您不能只让 Ah 包含 Bh 和 Bh 包含 Ah,因为当最多包含一次标头时,一个总是在另一个之前包含,最简单的解决方案就是使用前向引用:
啊
class B;
class A {
B* bObj;
}
A.cpp
#include "A.h"
#include "B.h"
...
溴化氢
class A;
class B {
A* aObjM;
}
B.cpp
#include "B.h"
#include "A.h"
...
这个简单的解决方案不允许您A
在(例如调用方法)中使用规范,B.h
反之亦然,也不允许您在 B 类中存储具体实例(A
vs A*
),但听起来不像您的情况。
您对每个文件都有哪些包含语句?从您在这里的情况来看,前向声明似乎对您有用。
// 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;
};