清除类型为“struct”的对象,而不进行简单的副本分配;改为使用赋值或值初始化 我正在研究一个包含C和C++代码的模块。问题是我得到了以下禁止的警告。我提供了导致该警告的代码 warning: 'void* memset(void*, int, size_t)' clearing an object of type 'struct OtherStructure_s ' with no trivial copy-assignment; use assignment or value-initialization instead [-Wclass-memaccess]\n")

清除类型为“struct”的对象,而不进行简单的副本分配;改为使用赋值或值初始化 我正在研究一个包含C和C++代码的模块。问题是我得到了以下禁止的警告。我提供了导致该警告的代码 warning: 'void* memset(void*, int, size_t)' clearing an object of type 'struct OtherStructure_s ' with no trivial copy-assignment; use assignment or value-initialization instead [-Wclass-memaccess]\n"),c++,struct,constructor,memset,C++,Struct,Constructor,Memset,消除该警告的最佳解决方案是什么?如果我在构造函数中初始化结构 TEST::TEST:_otherStructure{}这是一个好的解决方案吗?otherStructure没有一个解决方案。你不能使用memset。该类可能会分配一些其他资源,如堆内存 您不需要TEST::TEST:_otherStructure{}。测试的默认构造函数将默认构造其他结构。最好的解决方案是删除构造函数。问题的原因:。您不需要TEST::TEST:_otherStructure{}。测试的默认构造函数将默认构造其他结构

消除该警告的最佳解决方案是什么?如果我在构造函数中初始化结构 TEST::TEST:_otherStructure{}这是一个好的解决方案吗?

otherStructure没有一个解决方案。你不能使用memset。该类可能会分配一些其他资源,如堆内存


您不需要TEST::TEST:_otherStructure{}。测试的默认构造函数将默认构造其他结构。最好的解决方案是删除构造函数。

问题的原因:。您不需要TEST::TEST:_otherStructure{}。测试的默认构造函数将默认构造其他结构。最好的解决方案是删除构造函数。@ThomasSablik如果OP需要值初始化怎么办?@eerorika没有编译错误。有一个默认构造函数。显然,OP尝试默认初始化对象。
struct TEST {
  explicit TEST();
  OtherStructure_s _otherStructure;
};

TEST::TEST(){
  memset(&_otherStructure, 0, sizeof(OtherStructure_s));
}