Программный вопрос

Тема в разделе "Arduino & Shields", создана пользователем Arduiner001, 26 окт 2017.

  1. Arduiner001

    Arduiner001 Гик

    Всем привет! Я пишу под ESP32, но опубликовал сюда, чтобы пост увидело больше людей.
    Есть проблема: я написал структуру и функцию
    Код (C++):
    struct ui_state_t {
      bool up;
      bool down;
      bool left;
      bool right;

      bool center;
      bool back;
    };

    ui_state_t Read_UI() {
      //TODO: приделать и реализовать кнопки
      ui_state_t ui_state;
      ui_state.up = false;
      ui_state.down = false;
      ui_state.left = false;
      ui_state.right = false;
      ui_state.center = false;
      ui_state.back = false;
      if (!Serial.available()) {
        return ui_state;
      } else {
        char c = Serial.read();
        switch (c) {
          case 'w':
            ui_state.up = true;
            break;
          case 's':
            ui_state.center = true;
            break;
          case 'x':
            ui_state.down = true;
            break;
          case 'a':
            ui_state.left = true;
            break;
          case 'd':
            ui_state.right = true;
            break;
          case 'q':
            ui_state.back = true;
            break;
        }
      }
      return ui_state;
    }
    Однако, компилятор выдаёт ошибку, что
    Скажите пожалуйста, как обойти проблему
     
  2. qwone

    qwone Гик

    Вы структуру как тип и как объект различаете. Проще запись int a; int это тип a это объект. http://cppstudio.com/post/7008/
     
    arkadyf нравится это.
  3. Arduiner001

    Arduiner001 Гик

    Я ничего не понял. Получается, структуры нельзя возвращать?
     
  4. rkit

    rkit Гуру

    Если структура вам нужна в глобальном неймспейсе, то определите синоним для нее в нем
    Код (C++):
    typedef struct ui_state_t ui_state_t
    Иначе обращайтесь к структуре как к структуре
    Код (C++):
    struct ui_state_t Read_UI() {
     
    arkadyf нравится это.
  5. Arduiner001

    Arduiner001 Гик

    Да, спасибо, всё заработало!
     
  6. b707

    b707 Гуру

    Вообще, возвращать сложные типы по значению - это ламерство. Возвращайте ссылку на структуру. Это тем более актуально, когда вы пишете для микроконтроллера, где каждый байт на счету.
     
    Igor68 нравится это.
  7. Arduiner001

    Arduiner001 Гик

    Спасибо за совет. Однако, у ESP32 всё же 294 912 доступных байт оперативной памяти.