1

我想实现关联 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.hB.cpp

4

3 回答 3

2

您需要前向声明类:

啊:

class B;

class A {
    public:
        // methods
    private:
        B* b_obj;
};

溴化氢

class A;

class B {
    public: 
        // methods
    private:
        A* a_obj;
};
于 2013-10-06T13:18:44.980 回答
1

这种特定的交叉引用情况可以通过多种方式处理。

假设您不能只让 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 类中存储具体实例(Avs A*),但听起来不像您的情况。

于 2013-10-06T13:19:05.263 回答
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;
};
于 2013-10-06T13:29:16.830 回答