Форум программистов, компьютерный форум CyberForum.ru

Несколько mutable bool в классе - C++

Восстановить пароль Регистрация
 
arsgram
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 14
16.09.2013, 23:53     Несколько mutable bool в классе #1
Приветствую.
Столкнулся с необъяснимой для меня проблемой.
Суть:

Есть класс, пусть будет:
C++
1
2
3
4
5
6
7
8
9
10
11
class test {
mutable bool flag1, flag2, flag3, flag4;
public:
void setflag1(bool flag){ flag1 = flag; }
void setflag2(bool flag){ flag2 = flag; }
void setflag3(bool flag){ flag3 = flag; }
void setflag4(bool flag){ flag4 = flag; }
 
bool enabled(){ return (flag1 && flag2 && flag3 && flag4); }
bool disabled(){ return (!flag1 || !flag2 || !flag3 || !flag4); }
}
Почему mutable - т.к. в других классах есть указатель на список из этого класса, чтоб менять значение флагов.
Флаг - по сути, это правило отображения. Один флаг - один тип фильтра, если элемент класса попадает под любой из фильтров, то он не отображается. По дефолту флаги = true, чтоб "применить" фильтр флаг ставится false( на форме снимается галочка у чекбокса ).

test::disabled() почему-то постоянно возвращает false независимо от значения флагов.
Доходило даже до того, что я писал так:
C++
1
bool disabled(){ return true; }
И из другого класса он всё равно возвращал false! Причём в вижуал студии по брейкпоинту из того класса я смотрел на флаги в элементах и они выставлялись корректно.

Как такое может быть? Сам ума не приложу. Подскажите, пожалуйста.

Добавлено через 9 минут
Чуть не забыл.
Если флаг один, то всё работает как надо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2013, 23:53     Несколько mutable bool в классе
Посмотрите здесь:

C++ Изменить const с помощью mutable
bool+bool=string C++
Смысл спецификатора mutable C++
C++ const_cast mutable
C++ Поле mutable в структуре
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
17.09.2013, 02:23     Несколько mutable bool в классе #2

Не по теме:

- Когда будет конец света?
- Когда люди научаться форматировать программный код.
- Лучше уж конец света!



Не знаю, что у Вас, но у меня всё в порядке.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.09.2013, 13:58     Несколько mutable bool в классе #3
Цитата Сообщение от arsgram Посмотреть сообщение
Если флаг один, то всё работает как надо.
а если
Цитата Сообщение от arsgram Посмотреть сообщение
C++
1
bool disabled(){ return true; }
то всё равно false? Удивительно.
Приведите минимально рабочий пример с ошибкой - посмотрим.

А про mutable Вы видимо что-то не так поняли. Спецификатор mutable позволяет меня значение поля, даже если объект, содержащий это поле, константный.
Для флагов логичнее использовать какой-нибудь std::bitset например.
arsgram
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 14
17.09.2013, 16:11  [ТС]     Несколько mutable bool в классе #4
Сейчас покопаюсь в проекте и отпишу.
Код было лень тут пробелами форматировать

Использую mutable, т.к. объекты класса в списке не std'шном, а в QList'е, библиотека Qt. Он все свои элементы списка делает const, поэтому без mutable я не могу изменить что-либо из другого класса.(
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.09.2013, 16:23     Несколько mutable bool в классе #5

Не по теме:

Цитата Сообщение от arsgram Посмотреть сообщение
Использую mutable
Используйте QMutableListIterator.


Из-за того, что используете неверный тип итератора все Ваши проблемы, скорее всего, и возникают.
arsgram
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 14
17.09.2013, 17:11  [ТС]     Несколько mutable bool в классе #6
Не использовал итератор вообще.

В основном классе объявляется
C++
1
2
QList<baseObject> baseObjects;
//далее список наполняется объектами и всё такое.
Во втором классе есть такая штука:
C++
1
2
3
QList<baseObject> *baseObjects; // Внутри класса указатель
 
void class2::setList(QList<baseObject> *list){ baseObjects = list; }
В основном классе:
C++
1
2
c2 = new class2();
c2->setList(&baseObjects);
Из второго класса пытаюсь менять флаг теперь вот так:
C++
1
2
3
4
5
6
7
8
//Пусть flag == [B]false[/B]
QMutableListIterator<baseObject> i(*baseObjects);
    while (i.hasNext())
    {
        baseObject b = i.next();
        if(b.getValue() > value1 && b.getValue() <= value2) //Пара неких условий
            b.setFlag1(flag);
    }
Смотрю по брейкпоинту, один из флагов становится false, как и надо.
Есть ещё третий класс, у которого точно так же имеется указатель на список объектов. Смотрю оттуда - все флаги true.

К сожалению, выложить проект не могу весь, т.к. на самом деле он большой.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.09.2013, 17:21     Несколько mutable bool в классе #7
Должна быть ссылка. Иначе создается копия элемента.
C++
1
baseObject& b = i.next();
arsgram
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 14
17.09.2013, 18:48  [ТС]     Несколько mutable bool в классе #8
Ага, понял.
Сначала ничего не заработало как хотел. Сделал цикл, где проверялось disabled() ли элемент списка тоже итератором.
Всё заработало, но. решил проверить как там и что.
И завис. Как это вообще возможно? глюк вижуалки? Привет из прошлого? У меня раньше был один флаг в классе, но при этом всё работает корректно, как если было бы три флага, да и в коде их тоже три.
Картинка во вложениях.
Миниатюры
Несколько mutable bool в классе  
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.09.2013, 19:57     Несколько mutable bool в классе #9
arsgram, точку останова надо ставить на if, и состояние смотреть когда её достигли, а не до входа в цикл.
arsgram
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 14
17.09.2013, 22:39  [ТС]     Несколько mutable bool в классе #10
Я так и смотрю, я дальше просто f10 пронажимал, он получил в disabled() true и пошёл на следующую итерацию.
Я не о том.
Внизу, в структуре объекта присутствует переменная flag, причем одна, которую я заменил треям давно, что видно в правой части картинки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2013, 22:43     Несколько mutable bool в классе
Еще ссылки по теме:

C++ Назначение mutable в лямбда-функции
C++ Const_cast и mutable
Внутренняя работа mutable C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.09.2013, 22:43     Несколько mutable bool в классе #11
Цитата Сообщение от arsgram Посмотреть сообщение
которую я заменил треям давно
Попробуйте сделать очистку проекта с полной пересборкой. А потом посмотрите еще раз.
Yandex
Объявления
17.09.2013, 22:43     Несколько mutable bool в классе
Ответ Создать тему
Опции темы

Текущее время: 01:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru