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

0

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

 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
    Что вам не удалось сделать, так это показать нам Constr и то, как вы оставили объявление для Struct_Data вне его определения. Не могли бы вы опубликовать весь код? Это не так уж и много.
Теги:
constructor
initializer

2 ответа

1

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 { .... };
  • 0
    Спасибо jaunchopanza, но он не работает с m_tx_struct {}, tx_struct () {} ИЛИ m_tx_struct {reinterpret_cast <uint8_t *> (nullptr), 0U} {}. То, что я пробовал ранее 'tx_struct (reinterpret_cast <uint8_t *> (nullptr), 0U)', здесь чего-то не хватает :(
  • 0
    @learningfellow Что не работает и кто сказал вам использовать reinterpret_cast ?
Показать ещё 6 комментариев
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;
    };
    
  • 0
    Это не анонимная struct . Он просто использует синтаксис typedef стиле C.
  • 0
    @juanchopanza Насколько я понимаю, это анонимная структура, так как перед '{`нет имени. Возможно, я ошибаюсь.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню