2016-05-07 125 views
-1

这是这里C++队列错误

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

我的队列声明这这里就是我想我的问题是。每当我运行该程序时,我都会收到一个错误,指出“deque iterator不可取消”。

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

回答

2

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

bool hasMessages; 

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

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

这当然是未定义的行为。