假如现在有这样两个类a.b,两个类中互相包含:
class a:
#ifndef a_h
#define a_h
#include "b.h"
class A {
private:
B member;
public:
B f();
friend void B::g();
};
#endif
class b:
#ifndef b_h
#define b_h
#include "a.h"
class B {
private:
A member;
public:
void g();
A f();
friend class A;
};
#endif
main.cpp
#include "a.h"
#include "b.h"
int main(int argc, char *argv[])
{return 0};
g++编译出错:
unknown type name ‘A’
请问怎么解决这个问题?
非常感谢!
应该在类内部定义指针,实例化B的时候,调用函数来new a.
不能循环包含
a.h
#ifndef a_h
#define a_h
class B; //不要直接包含,简单声明即可
class A {
private:
B* member; //都要换成指针,这样才能用上面的简单声明(预先不知道大小)
public:
B* f();
friend void B::g();
};
#endif
b.h也一样处理。
其中一个类中使用前向引用申明另一个类就可以了。