Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在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 - Fatal编程技术网

如何在c+中实现关联+; 我想实现关联C++,但是我有几个错误,我无法解决它们。 Class A{ public: //methods private: B * b_obj; }; Class B{ public: //methods private: A * a_obj; }

如何在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; }

这两个类都在单独的文件中。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.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
vs
A*
),但听起来与您的情况不同。

每个文件都有哪些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。使用前向声明的目的是避免包含整个头文件。