Структура typedef не работает

esp8266 struct 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, а только с функцией. Кто-нибудь знает решение для этого? Спасибо!

, 👍1

Обсуждение

Синтаксис typedef: «typedef [известный тип] [новое имя];» поэтому RGB будет идти после закрывающей скобки определения структуры. Или посмотрите пост @edgarbonet для другой альтернативы., @JRobert


2 ответа


1

Есть 2 ошибки:

вы возвращаете тип класса, а не объект temp

  RGB func(){
    RGB temp;
    return RGB; --> return temp;
  }

Чтобы использовать ваш typedef, вы должны поместить struct "name" после фигурной скобки:

typedef struct
{
    double r;
    double g;
    double b;
} RGB;
,

Это работает, спасибо!, @Ivan Taccadoli


4

В простом C структуры идентифицируются "тегами структуры", которые не находятся в то же пространство имен, что и имена типов. Таким образом, если вы объявите

struct RGB {
    ...
};

переменная этого типа должна быть объявлена как

struct RGB led;

Чтобы избежать неудобств, связанных с повторным вводом struct, общая идиома состоит в том, чтобы определить его как тип:

typedef struct {
    ...
} RGB;

RGB led;

Однако среда Arduino основана на программировании на C++. язык. В C++ структурные теги являются типами, поэтому вам не нужны определение типа:

struct RGB {
    ...
};

RGB led;

Это рекомендуемая идиома в C++: просто удалите typedef.

,