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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вектор очередей  (Прочитано 2387 раз)
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 элементов.

Что не так?
Записан
Ced
Гость
« Ответ #1 : Май 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);

от чего-то работает.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 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
Записан
Ced
Гость
« Ответ #3 : Май 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);



Записан
Ced
Гость
« Ответ #4 : Май 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

Однако, спасибо. На будущее учту.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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