Собственное определение типа с использованием структуры не дает имени типу
Мне нужно инициализировать несколько кнопок и светодиодов, подключенных к моему Arduino. Чтобы хранить данные, относящиеся к отдельной кнопке или светодиоду, я решил определить свой собственный тип данных, используя две разные структуры. Один для кнопки, а другой для светодиода.
Поскольку мне нужно настроить некоторые графические процессоры и другие периферийные устройства после создания каждой кнопки / светодиода, я реализовал небольшую заводскую функцию, чтобы получить чистый интерфейс и объединить необходимые шаги для создания экземпляра и инициализации.
Определение моего собственного типа button_t работает, как и ожидалось. Компилятор не выдает никаких ошибок. Однако я попытался реализовать тот же подход для
типа led_t, когда компилятор выдает следующую ошибку:
пример: 25:1: ошибка: 'led_t' не называет тип
led_t Светодиодный завод (uint8_t pinNumber)
^~~~~
статус выхода 1 'led_t' не указывает тип
Мой пример кода выглядит следующим образом:
#include <Arduino.h>
#include <stdint.h>
struct button_t
{
const uint8_t pin;
uint8_t currentState;
uint8_t lastState;
uint32_t lastDebounceTime;
};
button_t buttonFactory(uint8_t pinNumber)
{
button_t btn = {pinNumber, 0, 0, 0};
// настройка некоторых регистров MCU здесь
return btn;
};
struct led_t
{
const uint8_t pin;
const uint8_t state;
};
led_t ledFactory(uint8_t pinNumber)
{
led_t led = {pinNumber, 0};
// настройка некоторых регистров MCU здесь
return led;
};
void setup()
{
}
void loop()
{
}
@albert, 👍2
2 ответа
Лучший ответ:
Это ошибка в среде IDE Arduino: при преобразовании вашего файла .ino в файл
.cpp было добавлено объявление для функции ledFactory()
перед объявлением типа led_t
.
Поскольку, по-видимому, эти объявления добавляются непосредственно перед первой функцией вашего скетча, простой обходной путь заключается в том, чтобы поместить все ваши определения типов перед вашими функциями.
Сначала создайте структуру, а затем создайте функцию и после строки объявления функции C++ — это нижний подход.
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, [измените], чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти [в справочном центре](/help/how-to-answer)., @Community
- Ошибка компиляции кода для Arduino/Genuino Uno
- Поскольку double и float представляют один и тот же тип данных (обычно), что предпочтительнее?
- Структура typedef не работает
- Проблема компиляции DigiSpark AT Tiny85?
- Как реализовать обратное перечисление?
- ошибка компиляции при изменении переменной с char на String
- UECIDE: ошибка компоновщика с библиотекой U8g2
- Присвоение значения порядку байтов структуры
@альберт, если вам интересно увидеть это искажение своими глазами, проверьте "компиляция" на "Показать подробно"... " в файле / Настройках. Вы должны увидеть полную командную строку компилятора непосредственно перед сообщением об ошибке. Он будет ссылаться на некоторые <build-process-generated-directory>/sketch/your_sketch_name.ino.cpp досье. Там вы видите результат манипулирования процессом сборки вашим файлом .ino в файл .cpp, который он в конечном итоге пытается скомпилировать. И для вашего кода, по крайней мере, в IDE версии 1.8.13, именно то, что описал Эдгар., @timemage