C++编译时报错 error: unknown type name ‘ ‘

今天项目中,遇到一个很奇怪的问题,明明导入了头文件,却一直说不知道该类型。

如类 VideoInfo 类存储的是视频 的信息参数,它当作参数,传入 解码器,作为解码器的成员变量,如下:

#include <cstdint>
#include "IDecode.h"
 
 
extern "C"{
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
};
 
class VideoInfo {
public:
    VideoInfo();
    void printVideoInfo();
public:
    const char *url; 
    AVFormatContext *formatContext;
    IDecode *decode;
 
};

而解码器IDecode代码:

#include "LPacket.h"
#include "VideoInfo.h"
 
 
class IDecode {
public:
    IDecode(){};
 
    virtual void initDecode(LPacket *lPacket)=0;
 
    virtual void decode(LPacket *lPacket)=0;
 
     void sendFrame(void *frame,  PacketType packetType);
 
public:
    VideoInfo *videoInfo;

就会报出,VideoInfo 中找不到IDecode类型,在IDecode找不到VideoInfo ,原因在于,它们的头文件互相调用,并且都包含互相类对象作为成员变量,从而 在初始化一个变量的时需要另外一个变量,发现需要自身初始化完毕后,才能初始化另外一个变量,从而编译失败。

总结:c++ 无法将2个类互相为成员变量,若想这样,就得以一个为void的指针形式,作为成员变量,然后在cpp 文件中,转化为成员变量的指针类型就可以了。
 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值