gpt4 book ai didi

c++ - 队列不是模板

转载 作者:太空宇宙 更新时间:2023-11-04 16:05:40 25 4
gpt4 key购买 nike

我一直在使用 C++ STL 创建代码。我想使用“队列”。所以,我写了如下代码。但是,我遇到了“queue is not a template”错误。如您所见,我在“Common.h”文件中编写了与队列(iostream、队列)相关的 header ,并在“DataQueue.h”文件中编写了包含“Common.h”。但是,VS2013 IDE 工具说 'queue m_deQueue' 是错误的,因为队列不是模板。我不知道为什么.. 发生此错误。感谢您的帮助!

//[Common.h]
#ifndef _COMMON_
#define _COMMON_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>

//thread related headers
#include <Windows.h>
#include <process.h>

//socket related headers
#include <winsock.h>

#include <iostream>
#include <queue>
#include <deque>
#include <vector>
#include <algorithm>
#include <math.h>

using namespace std;

#endif


//[DataQueue.h]
#ifndef _QUEUE_
#define _QUEUE_

#include "SocketStruct.h"
#include "Common.h"

class CDataQueue{
private:
static CDataQueue* m_cQueue;
// deque <ST_MONITORING_RESULT> m_deQueue;
queue <ST_MONITORING_RESULT> m_deQueue;
CRITICAL_SECTION m_stCriticalSection;

CDataQueue();
~CDataQueue();

public:
static CDataQueue* getDataQueue(){
if (m_cQueue == NULL){
m_cQueue = new CDataQueue();
}

return m_cQueue;
}

deque <ST_MONITORING_RESULT> 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(&m_stCriticalSection);
// m_mutex = PTHREAD_MUTEX_INITIALIZER;
}

CDataQueue::~CDataQueue(){
::DeleteCriticalSection(&m_stCriticalSection);
}

::deque <ST_MONITORING_RESULT> CDataQueue::getQueue(){

return m_deQueue;
}

void CDataQueue::pushDataToQueue(ST_MONITORING_RESULT data){

::EnterCriticalSection(&m_stCriticalSection);
m_deQueue.push_back(data);
::LeaveCriticalSection(&m_stCriticalSection);
}

ST_MONITORING_RESULT CDataQueue::popDataFromQueue(){

::EnterCriticalSection(&m_stCriticalSection);
ST_MONITORING_RESULT data = m_deQueue.front();
m_deQueue.pop_front();
::LeaveCriticalSection(&m_stCriticalSection);

return data;
}

最佳答案

坐在 <queue> 的顶部来自标准库的 MS 实现的 header ,我们发现...

// queue standard header
#pragma once
#ifndef _QUEUE_
#define _QUEUE_

这意味着您为自己的 header 围栏使用该标识符会阻止 MS header 主体被拉入。因此,没有 std::queue为你。使用不同的 id,最好是不违反为实现保留的宏常量的使用规则的东西(就像这个一样)。

children ,这就是为什么我们不使用为实现用途保留的标识符。有关更多信息,请阅读以下问题:"What are the rules about using an underscore in a C++ identifier?"

关于c++ - 队列不是模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36098167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com