Russian Qt Forum

Qt => Общие вопросы => Тема начата: lighting от Январь 18, 2012, 13:00



Название: Ошибка при обращении к элементам списка
Отправлено: lighting от Январь 18, 2012, 13:00
Создал структуру для своих данных
Код
C++ (Qt)
struct Participant
{
   int extNumber;
   QString IPAddress;
   int volume;
   bool muteState;
   bool muteMicState;
   int layout;
   bool focused;
};

Когда создаю экземпляр структуры все Ок

Код
C++ (Qt)
  Participant part;
   part.extNumber = 0;
 
Но когда создаю список таких структур и пытаюсь обратиться к элементам получаю ошибку

Код
C++ (Qt)
   QList<Participant> parts;
   parts.append(part);
   parts.at(0).extNumber = 0;
 
ошибка: assignment of data-member 'Participant::extNumber' in read-only structure
Константной я ее не объявлял, до заключения в список работать с ней было можно, в чем-же проблема при добавлении ее в список?


Название: Re: Ошибка при обращении к элементам списка
Отправлено: BRE от Январь 18, 2012, 13:05
Ну так компилятор тебе все объяснил:
assignment of data-member 'Participant::extNumber' in read-only structure

Если ты посмотришь на то, как как определен at:
const T & QList::at ( int i ) const
в особенности на const, то все станет ясно.

Ну и сразу стоит обратить внимание на:
T & QList::operator[] ( int i )
const T & QList::operator[] ( int i ) const

как видишь у этого оператора есть версия без const.


Название: Re: Ошибка при обращении к элементам списка
Отправлено: lighting от Январь 18, 2012, 13:12
BRE спасибо огромное, а я совсем не в ту сторону смотрел - все свои классы перебирал на предмет ошибок.


Название: Re: Ошибка при обращении к элементам списка
Отправлено: BRE от Январь 18, 2012, 13:33
Кстати, рекомендую для таких структур/классов использовать QSharedData/QSharedDataPointer (в документации есть пример).