Переместить код C с инициализацией структуры и присвоением компилятору c ++

0

Почему в C++ нет прямого указания во время объявления структуры? У меня есть следующий код C, который не работает с компилятором C++:

static const struct {
    struct structtype1 header;
    struct {
        struct structtype2 intf;
        struct structtype3  src;
    }  foo1, foo2;
}  bar = {
    .header = {
        .byte1 = 0x23,
        .length = 12,
        .count1 = 4,
        .count2 = 4,
    },
    .foo1= {
        .intf = {
            .data =  0x23,
            .len = 2,
            .ep = 3,
                },
        .src= {
            .data =  0x21,
            .len = 4,
            .ep = 2,
        },
        },
        .foo2= {
        .intf = {
            .data =  0x17,
            .len = 11,
            .ep = 2,
                },
        .src= {
            .data =  0x20,
            .len = 2,
            .ep = 1,
        },
        },
};
  • 5
    Назначенные инициализаторы - это функция C99, которая не была перенесена на C ++.
  • 0
    Вам придется рефакторинг кода
Показать ещё 1 комментарий
Теги:
struct

1 ответ

0

у вас есть два варианта:

1. Использовать конструкторы для этого

  • это определит значения для членов, но все структуры будут одинаковыми

    struct _pnt { int x,y,z;  _pnt() { x=0; y=0; z=0; } };
    _pnt p0,p1,p2;  // all points are initialized to (0,0,0)
    

2.use, как обычно, он все еще работает в любом компиляторе C++, который я использовал

  • Я думаю, это то, что вы хотите
  • Не забывайте, что порядок участников такой же, как в декларации !!!

    struct _pnt { int x,y,z; };
    _pnt p0={0.0,0.0,0.0},
         p1={1.0,0.0,0.0},
         p2={0.0,1.0,0.0};
    
  • проблема в том, что вы должны инициализировать всех участников не только некоторыми !!!

Ещё вопросы

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