После того как я объявитьC++ синтаксис перечисление
enum color {red, blue, green};
есть ли разница между
color a=blue;
и
enum color a=blue;
После того как я объявитьC++ синтаксис перечисление
enum color {red, blue, green};
есть ли разница между
color a=blue;
и
enum color a=blue;
enum MyEnumType { ALPHA, BETA, GAMMA };
enum MyEnumType x; /* legal in both C and C++ */
MyEnumType y; // legal only in C++
enum { HOMER, MARGE, BART, LISA, MAGGIE };
В языке C (в отличие от C++), для создания имени color
, вы должны ввести typedef enum scolor {red, blue, green} color;
, или используйте определение, содержащее вопрос, используя enum colour a = blue;
- в противном случае компилятор не будет знать, что такое color
.
В C++, любой struct X
, class Y
или enum Z
, автоматически псевдоним X
в struct X
и Y
в class Y
и Z
в enum Z
- тем самым снижая потребность в typedef struct X X;
и т.д. (хотя это будет по-прежнему в силе, так как C++ является, в целом, обратно совместим с C).
Обе формы одинаково допустимы в C++. Это вопрос стиля, который вы предпочитаете.
Предполагая, что никакая другая декларация color
не доступна, они означают одно и то же. Тем не менее, действительно необходимо предоставить другое определение color
, и enum color
может использоваться, чтобы убедиться, что этот тип используется.
enum color { red, blue, green };
color color(const char *);
enum color a = red;
На второй строке, указав тип возвращаемого значения, как color
действителен, и относится к enum color
. В третьей строке требуется ключевое слово enum
, потому что color
в противном случае ссылается на функцию, объявленную во второй строке.
Но для практических целей enum color
и color
в значительной степени означают то же самое.
Привет, я пробовал ваш код, но получаю сообщение об ошибке: error: type 'main() :: color' без ссылки, используемой для объявления функции 'main() :: color color (const char *)' with linkage [-fpermissive] | , Я понятия не имею, что это значит. – focusHard
@focusHard: Переместите определение функции за пределы основного (https://ideone.com/RgWBZx): http://stackoverflow.com/questions/16053148/type-with-no-linkage-used-to-declare-function -with-linkage – Bill
@focusHard Вы помещаете это внутри функции, и в этом случае 'enum color' является локально-локальным типом, который не может быть параметром внешней функции. Как правило, пока вам разрешено определять локально-локальные типы, существуют ограничения на то, как эти типы могут использоваться. Я решил, что код в моем ответе будет полной, действительной единицей перевода. – hvd
Больше, C вещь, действительно. Это та же самая сделка, что и 'struct'. – chris
'color a = blue;' не будет работать, если вы сделали что-то вроде: 'enum color {blue} color;'. В этом случае вам нужно «enum color a = blue», чтобы различать объект и тип. Конечно, вы просто не должны перегружать имя перечисления таким образом. – bames53