Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Ced от Май 01, 2017, 14:27



Название: Вектор очередей
Отправлено: Ced от Май 01, 2017, 14:27
Создал такую конструкцию

    QVector<QQueue<Message>> *recived;

Инициализировал

    recived      = new QVector<QQueue<Message>>(Message::last_command);

При первой же попытке

            recived[Message::give_time_periods_lists].data()->append(lastMessage);

получаю Segmentation

В отладчике смотрю, вроде вектор существует, нужной размерности.
Message::give_time_periods_lists за пределы размерности не выходит.
В каждом элементе вектора видна очередь.
Сказано, что она содержит 0 элементов.

Что не так?


Название: Re: Вектор очередей
Отправлено: Ced от Май 01, 2017, 15:15
А вот такой идиотизм

            QQueue<Message> temp;
            temp.enqueue(lastMessage);
//            recived[Message::give_time_periods_lists].data()->enqueue(lastMessage);
            recived->remove(Message::give_time_periods_lists);
            recived->insert(Message::give_time_periods_lists, temp);

от чего-то работает.


Название: Re: Вектор очередей
Отправлено: Igors от Май 01, 2017, 15:33
Пользуйтесь тегом для обрамления кода
  recived      = new QVector<QQueue<Message>>(Message::last_command);

При первой же попытке

            recived[Message::give_time_periods_lists].data()->append(lastMessage);

получаю Segmentation
Это Вы обратились не к "элементу вектора" а к "массиву этих векторов". Правильно напр так
Код
C++ (Qt)
(*recived)[Message::give_time_periods_lists].data()->append(lastMessage);
// а лучше так
(*recived)[Message::give_time_periods_lists].append(lastMessage);
 
И точнее здесь использовать QList вместо QVector


Название: Re: Вектор очередей
Отправлено: Ced от Май 01, 2017, 16:30
В итоге так работает:

Код:

    QVector<QQueue<Message>>  recived;

...............................................

    QQueue<Message> temp;
    for (int i = 0;i < Message::last_command;i++)
        recived.append(temp);

...........................

            recived[Message::give_time_periods_lists].enqueue(*lastMessage);





Название: Re: Вектор очередей
Отправлено: Ced от Май 01, 2017, 16:32
Это Вы обратились не к "элементу вектора" а к "массиву этих векторов". Правильно напр так
Код
C++ (Qt)
(*recived)[Message::give_time_periods_lists].data()->append(lastMessage);
// а лучше так
(*recived)[Message::give_time_periods_lists].append(lastMessage);
 
И точнее здесь использовать QList вместо QVector

Однако, спасибо. На будущее учту.