Частичная инициализация элемента структуры внутри структуры не работает (Arduino) - PullRequest
0 голосов
/ 21 июня 2019

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ - Это вопрос arduino .

У меня проблемы с инициализацией элемента структуры, который объявлен в другой структуре.

Мои структуры выглядят так:

struct finger
{
  int pin;
  bool upper_joint;
  bool lower_joint;
};

struct Glove {
  struct finger index;
  struct finger middle;
  struct finger ring;
  struct finger pinkie;
  struct finger thumb;
};

//Initializing the array
struct Glove glove = { .index.pin = 20, .middle.pin = 22, .ring.pin = 24, .thumb.pin = 26};

Я пытаюсь инициализировать переменную pin в структуре finger при объявлении перчатки struct.

Однако я получаю сообщение об ошибке:

expected primary-expression before '.' token

Мои полные сообщения об ошибках:

Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Board: "Arduino/Genuino Uno"

Sensor_Glove:40:24: error: expected primary-expression before '.' token

 struct Glove glove = { .index.pin = 20, .middle.pin = 22, .ring.pin = 24, .thumb.pin = 26};

                        ^

Sensor_Glove:40:41: error: expected primary-expression before '.' token

 struct Glove glove = { .index.pin = 20, .middle.pin = 22, .ring.pin = 24, .thumb.pin = 26};

                                         ^

Sensor_Glove:40:59: error: expected primary-expression before '.' token

 struct Glove glove = { .index.pin = 20, .middle.pin = 22, .ring.pin = 24, .thumb.pin = 26};

                                                           ^

Sensor_Glove:40:75: error: expected primary-expression before '.' token

 struct Glove glove = { .index.pin = 20, .middle.pin = 22, .ring.pin = 24, .thumb.pin = 26};

                                                                           ^

exit status 1
expected primary-expression before '.' token

1 Ответ

2 голосов
/ 21 июня 2019

Синтаксис, который вы использовали, недопустим для инициализации вложенных struct s. См. здесь -> Вложенный раздел инициализации - для правильного синтаксиса.

Ниже приведены действительные альтернативы того, чего вы пытаетесь достичь.

Использование обозначений ...

struct Glove glove = {                                                                                 
    .index = {
        .pin = 20
    },                                                                                                 
    .middle = {                                                                                        
        .pin = 22                                                                                      
    },
    .ring = {
        .pin = 24 
    },
    .thumb = {
        .pin = 26                                                                                      
    },                                                                                                 
};

Опираясь на порядок объявления элементов структуры ...

struct Glove glove3 = {
    {20}, // index - pin 
    {22}, // middle - pin                                                                              
    {24}, // ring - pin                                                                                
    {0}, // pinkie - pin                                                                               
    {26}, // thumb - pin                                                                               
};

Использование обозначений для внешних элементов, порядок объявления для внутренних ...

struct Glove glove2 = {                                                                                
    .index = {20}, // pin = 20                                                                         
    .middle = {22}, // pin = 22                                                                        
    .ring = {24}, // pin = 24                                                                          
    .thumb = {26}, // pin = 26                                                                         
    };

Быть непоследовательным ...

struct Glove glove4 = {
    .index = {20}, // index.pin = 20                                                                   
    {22}, // middle.pin = 22                                                                           
    // Since we are using designators we can change the order                                          
    .thumb = {26}, // thumb.pin = 26                                                                   
    .pinkie = {.pin = 24}, // pinkie.pin = 24                                                          
    };
...