Есть структура вида
typedef struct struct_name {
struct another_struct_name {
typefield1 field1;
typefield2 field2;
} const * field_name;
} struct_name_t;
typedef struct another_struct_name another_struct_name_t;
В Си данную структуру инициализирую например так
const another_struct_name_t some_an_s = {
.field1 = value1,
.field2 = value2
};
const struct_name_t name = { .field_name = &some_an_s };
Всё работает... однако, на С++ аналогичная конструкция
const struct_name_t name = {&some_an_s};
a value of type "const struct_name_t *
" cannot be used to initialize an entity of type "const struct_name::another_struct_name *
"
Если так
struct another_struct_name const* temp = {&some_an_s};
const struct_name_t name = {temp};
аналогичная ошибка. Как проинициализировать данную структуру правильно в С++?
Дело в том, что в С++ класс another_struct_name
будет вложенным в класс struct_name
, а не помещаться в глобальное пространство имен, как в С. Так что этот код уже не будет работать на выражении const another_struct_name_t some_an_s
. Чтобы объявления можно было нормально использовать и в С, и в С++ вам надо избавиться от вложенных структур. А вот designated initializers можно оставить - они будут официально поддерживаться в С++20 и во многих компиляторах реализованы уже сейчас.
typedef struct another_struct_name another_struct_name_t;
struct another_struct_name
{
int field1;
int field2;
};
typedef struct struct_name struct_name_t;
struct struct_name
{
another_struct_name_t const * field_name;
};
another_struct_name_t const some_an_s{.field1{3}, .field2{4}};
struct_name_t const name{.field_name{&some_an_s}};
online compiler
В С++ уже можно не дергаться со всеми этими typedef
.
struct struct_name {
struct another_struct_name {
typefield1 field1;
typefield2 field2;
} const * field_name;
};
struct_name::another_struct_name some_an_s{value1, value2};
struct_name name{&some_an_s};
Примерно так (не компилировал за отсутствием typefield
, например).
Только меня как минимум все же смущает создание объекта вложенной структуры за пределами охватывающего объекта... Не С++'ный подход.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как можно считать нажатие клавиши за одно, а не в стандартной форме: сигнал - пауза - сигнал (пока происходит нажатие)?
Пытаюсь хранить в контейнере абстрактный тип "Weapon", но возникает ошибкаКод:
Текст (10 000+ символов) при записи в БД обрезается, записывается не весьТекст меньшего размера записывается полностью