如何在c+中实现关联+; 我想实现关联C++,但是我有几个错误,我无法解决它们。 Class A{ public: //methods private: B * b_obj; }; Class B{ public: //methods private: A * a_obj; }
这两个类都在单独的文件中。i、 e.如何在c+中实现关联+; 我想实现关联C++,但是我有几个错误,我无法解决它们。 Class A{ public: //methods private: B * b_obj; }; Class B{ public: //methods private: A * a_obj; },c++,aggregation,composition,model-associations,cross-reference,C++,Aggregation,Composition,Model Associations,Cross Reference,这两个类都在单独的文件中。i、 e.A.h,A.cpp,B.h和B.cpp。 VS2012正在给出错误 错误C2061:A附近的语法错误您需要向前声明类: A.h: B.h 这种特殊的交叉参考情况可以用多种方式处理 假设您不能让A.h包含B.h,而B.h包含A.h,因为当最多包含一次标题时,一个标题将始终包含在另一个标题之前,最简单的解决方案就是使用: A.h class B; class A { B* bObj; } class A; class B { A* aObjM; }
A.h
,A.cpp
,B.h
和B.cpp
。
VS2012正在给出错误
错误C2061:A附近的语法错误您需要向前声明类: A.h: B.h
这种特殊的交叉参考情况可以用多种方式处理 假设您不能让A.h包含B.h,而B.h包含A.h,因为当最多包含一次标题时,一个标题将始终包含在另一个标题之前,最简单的解决方案就是使用: A.h
class B;
class A {
B* bObj;
}
class A;
class B {
A* aObjM;
}
A.cpp
#include "A.h"
#include "B.h"
...
#include "B.h"
#include "A.h"
...
B.h
class B;
class A {
B* bObj;
}
class A;
class B {
A* aObjM;
}
B.cpp
#include "A.h"
#include "B.h"
...
#include "B.h"
#include "A.h"
...
这个简单的解决方案不允许您在
B.h
中使用A
规范(例如调用方法),反之亦然,也不允许您在B类中存储具体实例(A
vsA*
),但听起来与您的情况不同。每个文件都有哪些include语句?从你们现在的情况来看,前瞻性声明似乎对你们有用
// 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;
};
我必须分别在B和A的.h文件中包含“A”和“B”吗?不,您只需将它们包含在源
.cpp
文件中,因为您需要向前声明类。因此,编译器在检查B.h
时知道类A
存在。A
的每个功能都是未知的(甚至大小!),所以你不能直接在B.h
中使用这些信息,但是你可以在B.cpp
中通过包含A.h
来使用这些信息。我必须要做什么分别在B和A的.h文件中?@FarazAhmad:No。使用前向声明的目的是避免包含整个头文件。