#c #struct #initialization #anonymous-types
#c #структура #инициализация #анонимные типы
Вопрос:
Как я мог бы инициализировать анонимные структуры?
class A
{
public:
A() : m_var.var_1(1)
{
}
private:
struct
{
int var_1;
int var_2;
}m_var;
};
Приведенный выше код выдает мне эту ошибку, когда я пытаюсь его скомпилировать:
main.cpp: In constructor ‘A::A()’:
main.cpp:6:16: error: expected ‘(’ before ‘.’ token
6 | A() : m_var.var_1(1)
| ^
| (
main.cpp:6:16: error: expected ‘{’ before ‘.’ token
Ответ №1:
Вы должны инициализировать весь объект, а не подобъекты элемента данных. Это не только специально для анонимных struct
. Например.
A() : m_var{1, 0} // m_var.var_1 and m_var.var_2 are initialized as 1 and 0
{
}
И начиная с C 20 мы можем использовать назначенные инициализаторы для указания элемента данных struct
при инициализации. Например.
A() : m_var{.var_1=1, .var_2=0} // same effect as above
{
}
Комментарии:
1. Также стоит упомянуть о наличии назначенных инициализаторов , которые больше похожи на то, что пытался сделать OP.