Структура typedef не работает
Я создал этот простой код, но получаю следующую ошибку
exit status 1
'RGB' does not name a type
typedef struct
RGB
{
double r;
double g;
double b;
};
RGB led;
RGB func(){
RGB temp;
return RGB;
}
Я получаю сообщение об ошибке не со светодиодом RGB, а только с функцией. Кто-нибудь знает решение для этого? Спасибо!
@Ivan Taccadoli, 👍1
Обсуждение2 ответа
Есть 2 ошибки:
вы возвращаете тип класса, а не объект temp
RGB func(){
RGB temp;
return RGB; --> return temp;
}
Чтобы использовать ваш typedef, вы должны поместить struct "name" после фигурной скобки:
typedef struct
{
double r;
double g;
double b;
} RGB;
Это работает, спасибо!, @Ivan Taccadoli
В простом C структуры идентифицируются "тегами структуры", которые не находятся в то же пространство имен, что и имена типов. Таким образом, если вы объявите
struct RGB {
...
};
переменная этого типа должна быть объявлена как
struct RGB led;
Чтобы избежать неудобств, связанных с повторным вводом struct
,
общая идиома состоит в том, чтобы определить его как тип:
typedef struct {
...
} RGB;
RGB led;
Однако среда Arduino основана на программировании на C++. язык. В C++ структурные теги являются типами, поэтому вам не нужны определение типа:
struct RGB {
...
};
RGB led;
Это рекомендуемая идиома в C++: просто удалите typedef.
- Собственное определение типа с использованием структуры не дает имени типу
- Одна и та же структура занимает разное пространство в памяти Uno и NodeMCU ESP8266, что приводит к повреждению данных при передаче через nRF24L01+
- Как реализовать обратное перечисление?
- Элементы, исключенные из вывода буферного массива после заданной структуры (ESP8266 WifiSniffer) (snifferPacket)
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
Синтаксис typedef: «typedef [известный тип] [новое имя];» поэтому RGB будет идти после закрывающей скобки определения структуры. Или посмотрите пост @edgarbonet для другой альтернативы., @JRobert