Я создал список очередей и мне было интересно, как я смогу отодвинуть очередь, чтобы добавить новый элемент. У меня есть несколько клиентов для отправки сообщений, и хост будет отправлять одно и то же сообщение каждому в определенном порядке. У меня сейчас это как
struct messages
{
char buffer[64];
}
list<queue<messages>> MessageList;
for(int i = 0; i < numOfClients; i++)
{
queue<messages> tempQueue;
MessageList.push_back(tempQueue);
}
list<queue<messages>>::iterator MsgIt;
MsgIt = MessageList.begin();
messages storedMsg = {}
char tempMsg[64] = "This is the message to be stored!";
for(int j = 0; j < 64; j++)
storedMsg.message[j] = tempMsg[j];
for(int i = 0; i < numOfClients; i++)
{
*MsgIt.push(storedMsg);
MsgIt++;
}
Кажется, есть ошибка, в которой *MsgIt
не позволит мне получить доступ к push()
функция.
Я это понимаю
queue<messages> MessageList;
MessageList.push(Message);
будет работать, но так как несколько клиентов получат это сообщение, я хочу использовать его в «списке очередей» вместо того, чтобы создавать 15-20 или около того очередей, которыми может быть сложно управлять.
Просто используйте MsgIt->push(Message)
вместо неловкого разыменования. .
оператор имеет более высокий приоритет, чем *
оператор, так что происходит, что он пытается позвонить .
на итераторе, а не на то, на что указывает итератор, а затем пытается разыменовать возвращаемое значение, ни то, ни другое. Вы должны сделать (*MsgIt).push
чтобы получить желаемый результат с помощью разыменования.
Кроме того, использование итераторов не совсем так, как вы должны это делать. Это должно выглядеть так:
for(MessageList::iterator MsgIt = MessageList.begin(), MsgIt < MessageList.end(), MsgIt++)
Наконец, как упомянул @ChronoTrigger, вы на самом деле не queue
в MessageList
список, по крайней мере, в этом коде. Так что нечего push
в первую очередь.
*MsgIt
имеет тип queue<messages>
, и вы пытаетесь вставить переменную типа char[64]
,
Вы должны вставить сначала queue
а затем, в queue
, твое сообщение.