c – 转发声明生成不兼容的类型错误

前端之家收集整理的这篇文章主要介绍了c – 转发声明生成不兼容的类型错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在阅读有关前瞻性声明的一些内容,包括在这个论坛中.他们都说它使我们免于包含头文件,但以下代码生成错误
#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必须有无限大小……

猜你在找的C&C++相关文章