如何在c ++中实现关联

时间:2013-10-06 13:12:53

标签: c++ aggregation composition model-associations cross-reference

我想实现关联I C ++,但是我收到了几个错误,我无法解决它们。

Class A{

public: //methods
private:
B * b_obj;

};

Class B{
public: //methods
private:
A * a_obj;
}

这两个类都在单独的文件中。即A.hA.cppB.hB.cpp。 VS2012给出了错误 错误C2061:A

附近的语法错误

3 个答案:

答案 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;
};