// У меня есть структура
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
{
}
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 { .... };
Другое решение:
Определите конструктор с необходимыми аргументами.
struct Struc_Data
{
Struc_Data(uint8_t* data1, uint16_t data2) : data(data1), data_In(data2) {}
uint8_t* data;
uint16_t data_ln;
};