问题描述
- C++ 类相互包含如何定义?
-
假如现在有这样两个类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也一样处理。
解决方案三:
其中一个类中使用前向引用申明另一个类就可以了。
时间: 2024-10-28 03:00:56