我已经创建了一个队列列表,并想知道我将如何能够推回队列以添加新元素。我有多个客户端发送消息,主机将按特定顺序向每个客户端发送完全相同的消息。我现在有
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);
可以工作,但由于有多个客户端收到此消息,我希望在队列列表中使用它&#34;而不是创建15-20个左右的队列,这些队列很难管理。
答案 0 :(得分:1)
*MsgIt
的类型为queue<messages>
,您尝试插入char[64]
类型的变量。
您应首先插入queue
,然后在queue
中插入您的消息。
答案 1 :(得分:0)
只需使用MsgIt->push(Message)
而不是尴尬的解除引用。 .
运算符的优先级高于*
运算符,所以发生的事情是它试图在迭代器上调用.
而不是迭代器指向的函数,然后尝试取消引用返回值,这两者都不是你想要的。您必须执行(*MsgIt).push
才能使用解除引用来获得所需的结果。
此外,您对迭代器的使用并不是您应该如何做到的。它应该看起来像:
for(MessageList::iterator MsgIt = MessageList.begin(), MsgIt < MessageList.end(), MsgIt++)
最后,正如@ChronoTrigger所提到的,您实际上并没有在queue
列表中放置任何MessageList
,至少在此代码中。因此,首先push
没有任何内容。