создание пустого конструктора для структуры с анонимным объединением - PullRequest
0 голосов
/ 24 июня 2019

Попытка создать пустой конструктор для структуры, в которой переменная-член имеет объединение.Union также имеет структуру и дополнительную переменную в качестве переменных-членов.

Принял несколько подходов, но не удалось.Как я могу создать пустой конструктор для вложенных анонимных структур?Как я могу вызвать переменные-члены потом?

typedef struct test_struct
{
   int a;
   union {
      int b;
      struct {
         int c;  
      };  
    };
 } test_struct; 

Ниже не скомпилируется

 test_struct() : a(10), b(20), c(30) {
 }   

Ниже задает b и c 30

test_struct() : a(10), b(20) {
   c = 30;
 }  

Вот функция печати

int main(void)
{  
   test_struct *ts = new test_struct();
   printf("%i\n%i\n%i\n", ts->a, ts->b, ts->c);
   return 0;
}

Я пытаюсь создать пустой конструктор, который будет печатать 10 20 30 с моим printf ().

РЕДАКТИРОВАТЬ: я получил комментарии о том, как я не могу инициализировать объединение таким образом.Однако полученный мной заголовочный файл (который я вообще не могу изменить) имеет структуры, определенные в такой вложенной структуре.Я не знаю, как идет инициализация, но мой код должен распечатать значения для всех переменных-членов.(a, b и c для приведенного ниже примера кода).Любые подходы / чтение я могу сделать, чтобы достичь этого?

1 Ответ

0 голосов
/ 24 июня 2019

Помимо ошибочного способа использования объединения, давайте придерживаться вопроса о вашей вложенной структуре. Ответ прост: вы не можете указать конструкторы для вложенных структур. Таким образом, даже если вы исправите код и правильно используете вложенную структуру, вы не сможете объявить конструктор или деструктор для этого анонимного класса / структуры, потому что имена конструкторов и деструкторов должны совпадать с именем класса. В приведенном вами примере анонимный класс является локальным. Это означает, что у него нет связи, поэтому искаженное имя даже не создается.

...