title: queue is not a template
body: <p>I've been creating codes using C++ STL. And I want to use "queue".
  So, I wrote the codes like below.
  But, I encountered "queue is not a template" error.
  As you can see, I wrote headers related with queue (iostream, queue) in "Common.h" file and wrote include "Common.h" in "DataQueue.h" file. But, VS2013 IDE tool said that 'queue  m_deQueue' is error because queue is not a template. I don't know why.. this error occured. Any help is appreciated!</p>
  
  <pre><code>//[Common.h]
  #ifndef _COMMON_
  #define _COMMON_
  
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;string.h&gt;
  #include &lt;string&gt;
  
  //thread related headers
  #include &lt;Windows.h&gt;
  #include &lt;process.h&gt;
  
  //socket related headers
  #include &lt;winsock.h&gt;
  
  #include &lt;iostream&gt;
  #include &lt;queue&gt;
  #include &lt;deque&gt;
  #include &lt;vector&gt;
  #include &lt;algorithm&gt;
  #include &lt;math.h&gt;
  
  using namespace std;
  
  #endif
  
  
  //[DataQueue.h]
  #ifndef _QUEUE_
  #define _QUEUE_
  
  #include "SocketStruct.h"
  #include "Common.h"
  
  class CDataQueue{
  private:
      static CDataQueue*                  m_cQueue;
  //  deque &lt;ST_MONITORING_RESULT&gt;        m_deQueue;
      queue &lt;ST_MONITORING_RESULT&gt;        m_deQueue;
      CRITICAL_SECTION                    m_stCriticalSection;
  
      CDataQueue();
      ~CDataQueue();
  
  public:
      static CDataQueue* getDataQueue(){
          if (m_cQueue == NULL){
              m_cQueue = new CDataQueue();
          }
  
          return m_cQueue;
      }
  
      deque &lt;ST_MONITORING_RESULT&gt; getQueue();
      void pushDataToQueue(ST_MONITORING_RESULT data);
      ST_MONITORING_RESULT popDataFromQueue();
  
  };
  #endif
  
  
  //[DataQueue.cpp]
  #include "DataQueue.h"
  
  CDataQueue* CDataQueue::m_cQueue = NULL;
  
  CDataQueue::CDataQueue(){
      ::InitializeCriticalSection(&amp;m_stCriticalSection);
      //  m_mutex = PTHREAD_MUTEX_INITIALIZER;
  }
  
  CDataQueue::~CDataQueue(){
      ::DeleteCriticalSection(&amp;m_stCriticalSection);
  }
  
  ::deque &lt;ST_MONITORING_RESULT&gt; CDataQueue::getQueue(){
  
      return m_deQueue;
  }
  
  void CDataQueue::pushDataToQueue(ST_MONITORING_RESULT data){
  
      ::EnterCriticalSection(&amp;m_stCriticalSection);
      m_deQueue.push_back(data);
      ::LeaveCriticalSection(&amp;m_stCriticalSection);
  }
  
  ST_MONITORING_RESULT CDataQueue::popDataFromQueue(){
  
      ::EnterCriticalSection(&amp;m_stCriticalSection);
      ST_MONITORING_RESULT data = m_deQueue.front();
      m_deQueue.pop_front();
      ::LeaveCriticalSection(&amp;m_stCriticalSection);
  
      return data;
  }
  </code></pre>