在C ++中初始化构造函数初始化列表中的结构

时间:2014-04-09 05:29:17

标签: c++ constructor initializer

//我有一个结构

 typedef struct
 {
    uint8_t* data;
    uint16_t data_ln;
 } Struc_Data;

//来自此结构的派生类型

 Struc_Data    tx_struct;

//我必须在构造函数初始化列表中初始化这个'tx_struct',我没有得到如何

 Constr::Constr( ):
    tx_struct  (reinterpret_cast<uint8_t*>(nullptr), 0U)  //this does not work
 {

 }

2 个答案:

答案 0 :(得分:2)

Struc_Data是一个聚合,所以如果你想对成员进行零初始化,那么值初始化就可以了:

Constr::Constr( ): tx_struct() {} // or tx_struct{}

否则,使用花括号初始化:

Constr::Constr( ): tx_struct{nullptr, 42U} {}

这是一个简化的编译示例:

#include <stdint.h>

typedef struct
{
  uint8_t* data;
  uint16_t data_ln;
} Struc_Data;

struct Foo
{
  Foo() : tx_struct{nullptr, 0U} {}
  Struc_Data tx_struct;
};

请注意,在C ++中,使用typedef语法进行类定义是很常见的。首选形式是

struct Struc_Data { .... };

答案 1 :(得分:0)

另一种解决方案:

  1. 将C样式结构更改为C ++样式结构。
  2. 使用必需的参数定义构造函数。

    struct Struc_Data
    {
      Struc_Data(uint8_t* data1, uint16_t data2) : data(data1), data_In(data2) {}
      uint8_t* data;
      uint16_t data_ln;
    };