myQueue
- это указатель , а не очередь и не может быть передан в std::back_inserter
. Чтобы исправить это, не объявляйте его как указатель.
Кроме того, std::back_inserter
нельзя использовать с std::queue
, как объясняется во второй опубликованной ссылке.
Вместо , просто напишите
std::queue<OrderInfo*> myQueue{
std::deque<OrderInfo*>(vec.begin(), vec.end())
};
Если вам действительно нужен указатель, измените код следующим образом:
std::queue<OrderInfo*>* myQueue = new std::queue<OrderInfo*>{
std::deque<OrderInfo*>(vec.begin(), vec.end())
};
Наконец, если вам нужно заполнить уже инициализированную очередь, выполните следующие действия: создайте временную очередь, используя приведенное выше, и назначьте ее указателю:
*myQueue = std::queue<OrderInfo*>{std::deque<OrderInfo*>(vec.begin(), vec.end())};
Если это выглядит слишком грязно, вы также можете создать временную переменную для этой очереди - но в этом случае вам нужно использовать std::move
чтобы гарантировать, что очередь получит назначенное перемещение, не дорого скопированное:
auto tmp = std::queue<OrderInfo*>{std::deque<OrderInfo*>(vec.begin(), vec.end())};
*myQueue = std::move(tmp);
В том же духе, тщательно продумайте, хотите ли вы хранить OrderInfo
s вместо указателей на OrderInfo
s.