2016-05-07 6 views
-1

これは私が私の問題だと思うのはここC++キューエラー

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

ここにこれは私のキューの宣言です。私がプログラムを実行するたびに、 "deque iterator 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; 
} 

答えて

2

ここでunlock()を使用する必要はありません。std::mutexは、範囲外になると自動的にロック解除されます。また、hasMessagesはif-else文の後にアクセスできません。if-else文のスコープ内で宣言されています。だから、あなたはする必要があります:

bool hasMessages; 

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

キューが空の場合、このコードはキューから最初の要素を削除しようとします。あなたが私を信じていないならば、ちょうどask your rubber duck

これはもちろん、未定義の動作です。