C++队列错误

C++ Queue error

本文关键字:错误 队列 C++      更新时间:2023-10-16

这是我在这里的队列声明

// TODO: Declare a queue here - e.g. as a global variable
queue<string>myQueue;

这就是我认为我的问题所在。每当我运行程序时,我都会收到一个错误,说明"deque迭代器不可取消引用。"

string receiveMessage()
{
    string messageValue = noMessage; // Don't change this value unless there is a message - default is improtant
    messageQueueMutex.lock();
    try
    {
        // TODO: Set hasMessages to true if your queue is not empty, otherwise set it to false:
        if(!myQueue.empty())
        {
            bool hasMessages = true;
        }
        else
        {
            bool hasMessages = false;
        }
            // TODO: Remove the first message from your queue and place it in messageValue:
            messageValue = myQueue.front();
            myQueue.pop();
    }
    catch (...)
    {
        cout << "Exception occurred - check your code!" << endl;
    }
    messageQueueMutex.unlock();
    return messageValue;
}

此处不需要使用unlock(),当超出范围时,std::mutex将自动解锁。此外,在if-else语句b/c之后,hasMessages将不可访问,它是在if-erse语句的作用域内声明的。所以,你需要做:

bool hasMessages;
if(!myQueue.empty())
{
    hasMessages = true;
}
else
{
    hasMessages = false;
}

如果队列为空,此代码仍将尝试从队列中删除第一个元素。如果你不相信我,就问问你的橡皮鸭。

当然,这是未定义的行为。