C ++循环包含内部结构

时间:2012-11-14 10:15:49

标签: c++ struct circular-dependency

我有一个关于通知的问题,这让我很疯狂:

的main.cpp

#include "A.hpp"
#include "B.hpp"

int main()
{
    A a();
    B b();
    return 0;
}

A.hpp

#ifndef _CLASS_A
#define _CLASS_A

#include "B.hpp"
class A
{
    public: 
        B* b;
        struct A_t
        {
            int id;
        };
};
#endif

B.hpp

#ifndef _CLASS_B
#define _CLASS_B

#include "A.hpp"

class B
{
    class A;  //Ok, with that I can use the class A
    public: 
        int a;
        A* b;  // That work!
        A::A_t *aStruct; // Opss! that throw a compilation error.

};
#endif

问题是:¿如何在B类中使用A_t结构?

我试图添加一个前向声明,如:

struct  A::A_t;

但这显然有效。

1 个答案:

答案 0 :(得分:3)

使用转发声明替换A.h中的包含。

#ifndef _CLASS_A
#define _CLASS_A
class B;
class A
{
    public: 
        B* b;
        struct A_t
        {
            int id;
        };
};
#endif

另外,请注意

A a();
B b();

不会创建两个类的实例,但它们是函数声明。你想要

A a;
B b;