c++中结构体套结构体用 = {0}初始化编译报错解决办法(用memset或者={})(error: invalid conversion)

Posted Dontla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中结构体套结构体用 = {0}初始化编译报错解决办法(用memset或者={})(error: invalid conversion)相关的知识,希望对你有一定的参考价值。

我这有个结构体:

VENC_CHN_ATTR_S venc_chn_attr;
/* the attribute of the venc chnl*/
typedef struct rkVENC_CHN_ATTR_S 	//视频编码通道属性结构体
  VENC_ATTR_S stVencAttr;    // the attribute of video encoder
  VENC_RC_ATTR_S stRcAttr;   // the attribute of rate  ctrl
  VENC_GOP_ATTR_S stGopAttr; // the attribute of gop
 VENC_CHN_ATTR_S;
/* the attribute of the Venc*/
typedef struct rkVENC_ATTR_S 	//编码参数结构体

  CODEC_TYPE_E enType;    // RW; the type of encodec
  IMAGE_TYPE_E imageType; // the type of input image
  RK_U32 u32VirWidth;  // stride width, same to buffer_width, must greater than
                       // width, often set vir_width=(width+15)&(~15)	//幅长
  RK_U32 u32VirHeight; // stride height, same to buffer_height, must greater
                       // than height, often set vir_height=(height+15)&(~15)
  RK_U32 u32Profile;   // RW;
                       // H.264:   66: baseline; 77:MP; 100:HP;	//画质
                       // H.265:   default:Main;
                       // Jpege/MJpege:   default:Baseline
  RK_BOOL bByFrame;    // RW; Range:[0,1];
                       // get stream mode is slice mode or frame mode
  RK_U32 u32PicWidth;  // RW; width of a picture to be encoded, in pixel
  RK_U32 u32PicHeight; // RW; height of a picture to be encoded, in pixel
  VENC_ROTATION_E enRotation;
  union 
    VENC_ATTR_H264_S stAttrH264e;   // attributes of H264e
    VENC_ATTR_H265_S stAttrH265e;   // attributes of H265e
    VENC_ATTR_MJPEG_S stAttrMjpege; // attributes of Mjpeg
    VENC_ATTR_JPEG_S stAttrJpege;   // attributes of jpeg
  ;
 VENC_ATTR_S;

我在c++中用 = 0初始化编译就报错:

VENC_CHN_ATTR_S venc_chn_attr = 0;

报错:

error: invalid conversion from ‘int’ to ‘CODEC_TYPE_E’ aka ‘rk_CODEC_TYPE_E’ [-fpermissive]
  VENC_CHN_ATTR_S venc_chn_attr = 0;

用memset函数就能正常编译通过:

memset(&venc_chn_attr, 0, sizeof(VENC_CHN_ATTR_S));

而在c中用 = 0是可以正常编译过的,到了c++里就不行了。。

原因,c++中结构体不能用 = 0来初始化,要用 = 来初始化

参考文章:c++中结构体中套结构体不能用 = 0来初始化吗? - 知乎

以上是关于c++中结构体套结构体用 = {0}初始化编译报错解决办法(用memset或者={})(error: invalid conversion)的主要内容,如果未能解决你的问题,请参考以下文章

C# 结构体

急求c语言 dev c++) 利用结构体做一个小系统,为啥直接无法编译运行?

C++ 结构体的声明

C++ 静态结构类型成员初始化

C++ 结构可以在不同的编译时间有不同的对齐方式吗?

在 C++ 中使用 memset 初始化具有不同值的结构数组元素