Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
5 / 5 / 0
Регистрация: 07.08.2017
Сообщений: 33
07.11.2017, 15:35  [ТС] 1
Author24 — интернет-сервис помощи студентам
Здравствуйте! Объясните пожалуйста, как использовать флаги в C++? А именно операторы |= и ^=

Например код
C++
1
2
3
4
5
6
7
8
9
10
11
12
enum Side{
None = 0,
Up = 1,
Down = 2,
Left = 4,
Right = 8
};
 
int main(){
Side a = Side::Up;
a |= Side::Down;
}
Возвращает ошибку "для этой операции с перечисляемым типом требуется соответствующая определяемая пользователем функция оператора"
Почему?
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
07.11.2017, 15:50 2
Лучший ответ Сообщение было отмечено long399 как решение

Решение

C++
1
int a
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
07.11.2017, 15:52 3
Фишка в том, что переменная типа Side никак не может быть Side::Up | Side::Down, потому что ни одно из значений типа Side не отвечает такому состоянию. Поэтому оперировать с enum в таком ключе недопускается. Но вы можете сделать так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
enum Side{
None = 0,
Up = 1,
Down = 2,
Left = 4,
Right = 8
};
 
int main(){
int a = Side::Up;
a |= Side::Down;
}
И это будет работать.
0
5 / 5 / 0
Регистрация: 07.08.2017
Сообщений: 33
07.11.2017, 15:53  [ТС] 4
Цитата Сообщение от nmcf Посмотреть сообщение
int a
Ты просто бог краткости! Спасибо!
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
07.04.2022, 00:14 5
C++
1
2
3
int main(){
int a = Side::Up;
a |= Side::Down;
И это будет работать.
Ну и говно код!

Цитата Сообщение от Dowow Team Посмотреть сообщение
Возвращает ошибку "для этой операции с перечисляемым типом требуется соответствующая определяемая пользователем функция оператора"
как сделать такую функцию?
в поиске ничего ненашел как работать с таким enum-типом переменной.
0
18894 / 9852 / 2410
Регистрация: 30.01.2014
Сообщений: 17,296
07.04.2022, 11:14 6
Цитата Сообщение от Fakels Посмотреть сообщение
как сделать такую функцию?
C++
1
2
3
4
5
Side& operator|=(Side& side, Side const& other) 
{
....
    return side;    
}
0
07.04.2022, 11:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2022, 11:14
Помогаю со студенческими работами здесь

использование флагов
как используя флаги регистра флагов производить 32 разрядные вычисления на 16 разрядных регистрах?

Сложение флагов
Пример из урока startandroid: pMeasure.getMatrix(distance, matrix, ...

Изменение флагов в резиденте
Требуется написать резидент - драйвер преобразования русских букв к верхнему регистру. По нажатию...

Порядок флагов D3DFVF_*
Вот, встречаю во многих местах: Это как? Разве "D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1" не...

Инвертировать значения флагов
помогите справиться вот с такой задачей: Инвертировать значения флагов SF, ZF, AF, PF и CF.

Проверка битовых флагов
Привет всем. Подскажите как мне проверить включен ли флаг или нет? Вот к примеру есть такое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru