Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > enum в классе |
Автор: Hagrael 22.7.2011, 19:16 | ||
Имеется код:
Компилятор ругается. Говорит "ePlayerStatus in class cPlayer does not name a type". Перевести это я могу (вроде ![]() ![]() Заранее благодарен. |
Автор: boostcoder 22.7.2011, 19:21 | ||
http://liveworkspace.org/code/76ff542aa7bf5fbc9485693c50adcf77 Добавлено через 7 минут и 28 секунд ePlayerStatus в классе cPlayer не является именем типа. |
Автор: Hagrael 22.7.2011, 19:36 |
Спасибо. |
Автор: bsa 22.7.2011, 20:28 |
Hagrael, скажу тебе сразу, что подобное смысла не имеет. Так как пользоваться currentStatus из-вне (а иначе зачем в public) будет очень затруднительно. |
Автор: Hagrael 22.7.2011, 20:34 |
bsa, только что именно это я и заметил ![]() |
Автор: boostcoder 22.7.2011, 20:53 | ||
http://liveworkspace.org/code/03eac72912d9894fc1f81cf2290c7094 Добавлено через 10 минут и 44 секунды Hagrael, объясни, чего хочешь добиться? |
Автор: borisbn 22.7.2011, 21:10 | ||
шлифовать, так шлифовать ![]()
P.S. ![]() именование типов - жуть... венгерщиной попахивает ![]() |
Автор: mes 22.7.2011, 23:56 | ||
я бы еще вынес enum наружу, например так :
P.S. имена состоящие из всех заглавнных букв "закреплены" за макросами, поэтому с этим стоит быть поосторожней, чтоб не нарваться на необъснимую ошибку.. |
Автор: Alca 23.7.2011, 00:13 | ||
зачем? |
Автор: boostcoder 23.7.2011, 00:20 |
borisbn, mes, может просто почитать про "enum class" ;) например тут: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf Добавлено @ 00:30 Alca, перешел по ссылке у тебя в подписи, а там внизу страницы есть такое: ![]() ну добавь readme. а то реально не понятно что за либа. |
Автор: Hagrael 23.7.2011, 07:32 |
А вы бы как это оформили, можете показать? (или то, как вы написали, и есть ваш вариант?) Обращение через cPlayer::... Значит, нельзя присвоить enum классу, а после обращаться к его "вариантам" напрямую (без cPlayer::). Тогда буду делать enum глобальным. |
Автор: borisbn 23.7.2011, 09:18 | ||||
А чтобы не пересекаться с каким-нибудь другим плеером заключить весь класс в namespace с названием проекта (или ещё какм-нить)
обращаться можно (см. typedef от mes), но IMHO так ( с Player:: ) будет более читабельно... Сразу понятно о каком статусе идёт речь. |
Автор: mes 23.7.2011, 10:34 | ||||||||||
Вы думаете мы не в курсе ? ;) или считаете, что новичков с ходу надо грузить новым стандартом ? чтоб не нагружать класс плеера тем, что к нему относится косвенно..
namespace нужен, чтоб вынести константы енума из глобальной области видимости, для повышения читабельности и исключения пересечений.. а typedef для того чтоб был более удобный тип ePlayerStatus вместо PlayerStatus::eNum.. Добавлено через 4 минуты и 56 секунд
старайтесь избегать интерфейса в виде сочетаний геттера и сеттера.. если нужно только это то лучше оформить как структурный блок данных, а не как класс.. касательно текущего вопроса, то, имхо, наиболее подходящим будет использование геттера и нескольких методов изменяющих состояние вместо сеттера.. Добавлено через 7 минут и 31 секунду
как typedef поможет обращаться к "вариантам" енума напрямую ? |
Автор: boostcoder 23.7.2011, 11:41 |
![]() |
Автор: borisbn 23.7.2011, 12:49 | ||
под "только это" Вы имели в виду, что больше функциональности в классе нет ? Только private-член, геттер и сеттер ? Если да, то что Вы понимаете под "оформить как структурный блок данных" ? Можно пример ? |
Автор: mes 23.7.2011, 13:58 | ||||
примерно.. грубо говоря, если класс состоит только из гетеров и сеттеров..
![]() |
Автор: bsa 24.7.2011, 20:44 | ||
|