我一直在阅读有关前瞻性声明的一些内容,包括在这个论坛中.他们都说它使我们免于包含头文件,但以下代码会生成错误:
#ifndef CLASSA_H_ #define CLASSA_H_ class B; class A { public: A(); ~A(); int getCount(); private: static int _count; int _num; B _b1; //ERROR };
编译说:
A.h:23:错误:字段’_b1’的类型不完整
我注意到如果我制作B型*的_b1,问题就解决了.
那么前向声明只适用于指针类型吗?
如果我想要A持有B对象,我必须#inlcude“B.h”?
谢谢!
解决方法
编译器必须知道B类的确切定义,以确定至少给A类的大小.如果使用指针,它就知道它的大小.
请注意,循环依赖是不可能的.如果你想
class A { B b; }; class B { A a; };
然后A和B必须有无限大小……