【问题标题】:C++ - Pushing back a list of queuesC++ - 推回队列列表
【发布时间】:2014-03-12 03:23:15
【问题描述】:

我已经创建了一个队列列表,并且想知道如何才能将队列推回以添加新元素。我有多个客户端要向其发送消息,主机将按特定顺序向每个客户端发送完全相同的消息。我目前拥有它

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 个左右的队列。

【问题讨论】:

    标签: c++ list queue add elements


    【解决方案1】:

    *MsgIt 的类型为 queue&lt;messages&gt;,而您正尝试插入类型为 char[64] 的变量。

    您应该先插入queue,然后在queue 中插入您的消息。

    【讨论】:

    • 我已经编辑了原始帖子以包括填充我最初拥有的列表的队列的初始化。但即便如此,我似乎仍然会出错。
    • 查看我的回答,了解为什么它仍然会失败。
    【解决方案2】:

    只需使用MsgIt-&gt;push(Message) 而不是尴尬的取消引用。 . 运算符比 * 运算符具有更高的优先级,所以发生的情况是它试图在迭代器上调用 . 而不是迭代器指向的,然后试图取消引用返回的值,两者都没有是你想要的。您必须执行 (*MsgIt).push 才能使用取消引用获得所需的结果。

    此外,您对迭代器的使用并不是您真正应该这样做的。它应该看起来像:

    for(MessageList::iterator MsgIt = MessageList.begin(), MsgIt < MessageList.end(), MsgIt++)
    

    最后,正如@ChronoTrigger 所提到的,您实际上并没有在MessageList 列表中放置任何queues,至少在这段代码中是这样。因此,push 首先没有任何意义。

    【讨论】:

    • 我不记得 C++ 是否对静态分配的数组进行深拷贝。它发生了。我同意它至少应该是一个 std::string 以防止缓冲区溢出。
    • MsgIt-&gt;push(Message) 完美运行。和(*MsgIt).push 一样被接受为答案
    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2018-11-12
    • 2020-04-29
    • 2019-07-03
    • 1970-01-01
    相关资源
    最近更新 更多