инициализировать структуру в списке инициализатора конструктора в переполнении стека

// У меня есть структура

 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
{

}

0

Решение

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

Другие решения

Другое решение:

  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;
    };
    
0

По вопросам рекламы [email protected]