当前位置:   article > 正文

C++编译时报错 error: unknown type name ‘ ‘_main.c:10:2: error: unknown type name ‘datafloat’;

main.c:10:2: error: unknown type name ‘datafloat’; use ‘union’ keyword t

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

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

  1. #include <cstdint>
  2. #include "IDecode.h"
  3. extern "C"{
  4. #include "libavformat/avformat.h"
  5. #include "libavcodec/avcodec.h"
  6. };
  7. class VideoInfo {
  8. public:
  9. VideoInfo();
  10. void printVideoInfo();
  11. public:
  12. const char *url;
  13. AVFormatContext *formatContext;
  14. IDecode *decode;
  15. };

而解码器IDecode代码:

  1. #include "LPacket.h"
  2. #include "VideoInfo.h"
  3. class IDecode {
  4. public:
  5. IDecode(){};
  6. virtual void initDecode(LPacket *lPacket)=0;
  7. virtual void decode(LPacket *lPacket)=0;
  8. void sendFrame(void *frame, PacketType packetType);
  9. public:
  10. VideoInfo *videoInfo;

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

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

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号