我有一个关于通知的问题,这让我很疯狂:
#include "A.hpp"
#include "B.hpp"
int main()
{
A a();
B b();
return 0;
}
#ifndef _CLASS_A
#define _CLASS_A
#include "B.hpp"
class A
{
public:
B* b;
struct A_t
{
int id;
};
};
#endif
#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;
但这显然有效。
答案 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;