C ++ циркуляр включает в себя с внутренними структурами

У меня есть вопрос по поводу циркулярных включений, которые сводят меня с ума:

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

Вопрос в следующем: ¿Как я могу использовать структуру A_t в классе B?

Я попытался добавить предварительную декларацию, как:

struct  A::A_t;

Но это, очевидно, работает.

1

Решение

Заменить включить в 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;
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]