Russian Qt Forum
Сентябрь 27, 2024, 12:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как из QList<TCode> ObjectList удалить элемент?  (Прочитано 4352 раз)
Martiro
Гость
« : Октябрь 14, 2010, 15:03 »

Есть структура
Код:
typedef struct
{
   short int code1;           
   short int code2;           
   short int typeInterval; 
   short int typeObject;     
   int minValue;                 
   int maxValue;             
} TCode;

На ее основе создается QList
Код:
QList<TCode> ObjectList;

Потом этот ObjectList заполняю
Код:
TCode curSt;
curSt.code1 = 1;
curSt.code2 = 3;
//...
ObjectList.append(curSt);

Когда я хочу удалить из этого QList элемент, пишу:
Код:
//...
ObjectList.removeAt(i);

Компилятор обругивает:
Цитировать
2844: error: passing `const QList<TCode>' as `this' argument of `void QList<T>::removeAt(int) [with T = TCode]' discards qualifiers

Вопросы: Почему? Как дальше быть? Непонимающий
Qt4
Записан
SimpleSunny
Гость
« Ответ #1 : Октябрь 14, 2010, 15:13 »

removeAt неконстантный метод, а ObjectList объявлен с const.
Записан
Martiro
Гость
« Ответ #2 : Октябрь 14, 2010, 16:34 »

И как же посоветуете поступить в этой ситуации?
Записан
marbius
Гость
« Ответ #3 : Октябрь 14, 2010, 18:51 »

void myClass::myMethod() const
{  ...
    ObjectList.removeAt(i);
    ...
}

определить метод без const
Записан
Martiro
Гость
« Ответ #4 : Октябрь 14, 2010, 19:29 »

А он и так не const.
Пока что в голову приходит только как переделать struct в класс от QObject.
Записан
marbius
Гость
« Ответ #5 : Октябрь 14, 2010, 19:42 »

Ну, я перед этим писал сообщение, а потом его удалил. Смысл его был в том, что Ваш код у меня проходит без ошибок. Я не смог повторить Вашего сообщения об ошибке, пока не поставил const в определение метода. Такие же комментарии на англоязычных просторах интернета имеются про подобного рода ошибки.
Записан
SimpleSunny
Гость
« Ответ #6 : Октябрь 14, 2010, 20:08 »

Покажите функцию, метод где ругается компилятор.
Записан
Martiro
Гость
« Ответ #7 : Октябрь 15, 2010, 12:09 »

Код
C
bool objectTree::removeStruct(int iSegNumb, int iRSC, int iCode1, int iCode2)
{
if (tree.count() == 0) return(false);
for (int i = 0; i < tree.count(); i++)
{
curSegment = tree.at(i);
if (iSegNumb == curSegment->SegmentNumber)
{
  for (int j =0; j < curSegment->SegmentList.count(); j++)
     {
       if (curSegment->SegmentList.at(j).RscCode == iRSC)
          {
             for (int l = 0; l < curSegment->SegmentList.at(j).ObjectList.count(); l++)
               {
                 if ((curSegment->SegmentList.at(j).ObjectList.at(l).code1 == iCode1) && (curSegment->SegmentList.at(j).ObjectList.at(l).code2 == iCode2))
                     {
                        curSegment->SegmentList.at(j).ObjectList.removeAt(l);
                        return(true);
                      }
               }
          }
    }
    return(false);
  }
 }
return(false);
}

Где:

Код:
QList<clSegment *> tree;
Код:
clSegment * curSegment;
Код:
class clSegment
{
public:
clSegment();
~clSegment(){;}
short int SegmentNumber;
clObjectDesc curObjectDesc;
QList<clObjectDesc> SegmentList;
};
Код:
class clObjectDesc{
public:
clObjectDesc();
QString NameObject;
int RscCode;
TCode curSt;
QList<TCode> ObjectList;
~clObjectDesc(){;}
};
Код:
typedef struct
{
short int code1;
short int code2;
short int typeInterval;
short int typeObject;
int minValue;
int maxValue;
} TCode;
Записан
BRE
Гость
« Ответ #8 : Октябрь 15, 2010, 13:14 »

const T & QList::at ( int i ) const

Обрати внимание на слова const.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 21.