C++ 队列错误

C++ Queue error

这是我的队列声明

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

这就是我认为我的问题所在。每当我 运行 程序时,我都会收到一条错误消息 "deque iterator not dereferencable."

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;
}

如果队列为空,此代码仍会尝试从队列中删除第一个元素。不信就ask your rubber duck.

这当然是未定义的行为。

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

bool hasMessages;

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