![]() |
|
Модераторы: bsa |
![]()
|
|
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
В одном файле определено перечисление:
enum ms {ONE, TWO} State; Как в другом файле можно обратиться к State? компилятор ругается на extern enum State ; или extern ms State; |
|||
|
||||
| math64 |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
state.h:
state.cpp:
main.cpp:
|
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Riddik
ему должен быть известен тип, обяви тип enum ms {ONE, TWO} в заголовочном файле, иклудь в обоих юнитах. А дальше экстерном - как обычно. Это сообщение отредактировал(а) azesmcar - 4.5.2009, 15:48 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
PS: нужно #include "state.h"
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
a еще лучше (имхо) объявлять переменные не enum типа, а простого целочисленного.
А енумы использовать как набор констант (для сравнения или присваивания). Это сообщение отредактировал(а) mes - 4.5.2009, 15:50 |
|||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Большое спасибо всем
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Почему нельзя создать два enum c различными именами, но частично одинаковым содержимым?
|
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
zim22
Потому что члены перечисления входят в то пространство имен, в котором было обявлено само перечисление.
в вашем примере имя А фигурирует в обоих перечислениях и если написать std::cout << (int)A; будет неоднозначность - какую именно выводить. Можно сделать так
и кстати мне кажется что так и надо использовать перечисления Это сообщение отредактировал(а) azesmcar - 4.5.2009, 16:33 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: нет Всего: 92 |
Эээ... Ну и как мне теперь создать переменную типа этого енума?! |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Любитель
Если нужно создавать - тогда перечисление нужно именовать разумеется
пространство имен этому никак не препятствует Это сообщение отредактировал(а) azesmcar - 4.5.2009, 17:00 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Любитель, А можно узнать хоть одно преимущество, которое дается при создании переменнной типа енум ? я, к сожалению, вижу только недостатки. P.S. чтоб не подумали, что я противник енумов, повторюсь - я стороник такого подхода :
Это сообщение отредактировал(а) mes - 4.5.2009, 17:20 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
mes, проверка на этапе компиляции.
Кстати, enum используется в шаблонном программировании для превращения чисел в типы (у Александреску написано), но тут уже без переменных собственно. |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
||||
|
||||
| mes |
|
||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
которая подводит в неподходящий момент :
употребление в шаблонах отдельная тема.
насчет void* Вы не по адресу - я стороник типизации. Но, наверно, я не сталкивался с такими задачами, когда мне нужен был именно контроль по enum-типу и при этом хватало бы гарантий которые он дает. (старался типобезопасность обеспечить через более "надежные" типы). Обычно enum использую для битовых комбинаций флагов, и в таком случае от злоупотребления енумов получаю лишь лишнюю писанину:
Я вполне допускаю, что есть и другие ситуации, в которых от типизации по енуму была бы польза (не отказался от примера такой задачи), но на текущем этапе придерживаюсь упомянутого ранее мнения . Это сообщение отредактировал(а) mes - 4.5.2009, 19:22 |
||||||||
|
|||||||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |