Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将模板传递给deque_C++_Templates - Fatal编程技术网

C++ 将模板传递给deque

C++ 将模板传递给deque,c++,templates,C++,Templates,我正在尝试为deque编写一个容器类来创建一个循环缓冲区(这里使用deque很重要,因为该类正在替换向量,并且需要像这里一样使用)。我不想让容器类特定于特定的deque;也就是说,我希望该类是一个模板类,而deque则获得模板类型。但是,我的代码在编译时使用了未定义的类型错误(c:\program files(x86)\microsoft visual studio 10.0\vc\include\deque(795):错误C2027:使用未定义的类型“dequeClass”) 守则: #pra

我正在尝试为deque编写一个容器类来创建一个循环缓冲区(这里使用deque很重要,因为该类正在替换向量,并且需要像这里一样使用)。我不想让容器类特定于特定的deque;也就是说,我希望该类是一个模板类,而deque则获得模板类型。但是,我的代码在编译时使用了未定义的类型错误(c:\program files(x86)\microsoft visual studio 10.0\vc\include\deque(795):错误C2027:使用未定义的类型“dequeClass”)

守则:

#pragma once

#include <deque>

template<typename dequeClass>
class CircularDeque {
public:
    CircularDeque(int newMax);
    ~CircularDeque();
    void push_front(dequeClass&& val);
    void push_front(const dequeClass& val);
    void push_back(dequeClass&& val);
    void push_back(const dequeClass& val);
    std::deque<dequeClass> que;
    int getMax();
    void setMax(int newMax);
private:
    unsigned int max;
};

CircularDeque<class dequeClass>::CircularDeque(int newMax) {
    max = newMax;
}

void CircularDeque<class dequeClass>::push_front(dequeClass&& val) {
    que.push_front(val);
    if(que.size() > max) {
        que.pop_back();
    }
}

void CircularDeque<class dequeClass>::push_front(const dequeClass& val) {
    que.push_front(val);
    if(que.size() > max) {
        que.pop_back();
    }
}

void CircularDeque<class dequeClass>::push_back(dequeClass&& val) {
    que.push_back(val);
    if(que.size() > max) {
        que.pop_front();
    }
}

void CircularDeque<class dequeClass>::push_back(const dequeClass& val) {
    que.push_back(val);
    if(que.size() > max) {
        que.pop_front();
    }
}

int CircularDeque<class dequeClass>::getMax() {
    return max;
}

void CircularDeque<class dequeClass>::setMax(int newMax) {
    max = newMax;
}
#pragma一次
#包括
模板
类循环{
公众:
循环量(int-newMax);
~CircularDeque();
无效推前(dequeClass&val);
无效推前(const dequeClass&val);
无效推回(dequeClass&val);
无效推回(const dequeClass&val);
std::deque-que;
int getMax();
void setMax(int newMax);
私人:
无符号整数最大值;
};
CircularDeque::CircularDeque(int newMax){
max=newMax;
}
无效循环队列::向前推(dequeClass&&val){
que.向前推(val);
如果(que.size()>最大值){
突然,砰的一声回来了;
}
}
无效循环队列::向前推送(常量dequeClass和val){
que.向前推(val);
如果(que.size()>最大值){
突然,砰的一声回来了;
}
}
void CircularDeque::推回(dequeClass&&val){
q.推回(val);
如果(que.size()>最大值){
Q.pop_front();
}
}
无效循环查询::推回(const dequeClass&val){
q.推回(val);
如果(que.size()>最大值){
Q.pop_front();
}
}
int CircularDeque::getMax(){
返回最大值;
}
void CircularDeque::setMax(int newMax){
max=newMax;
}

有人知道我可以在这里做什么吗?

模板类的每个内联成员都必须以模板参数列表开头。即:

CircularDeque<class dequeClass>::CircularDeque(int newMax) {
    max = newMax;
}
CircularDeque::CircularDeque(int newMax){
max=newMax;
}
应该是这样的:

template<class dequeClass>
CircularDeque<dequeClass>::CircularDeque(int newMax) {
    max = newMax;
}
模板
CircularDeque::CircularDeque(int newMax){
max=newMax;
}

对所有类外定义执行此操作。

将函数定义内联或使用如下模板声明将其前置:

template<typename dequeClass>
CircularDeque<class dequeClass>::CircularDeque(int newMax) {
    max = newMax;
}
模板
CircularDeque::CircularDeque(int newMax){
max=newMax;
}

如果您只是想专门化std::deque的行为,为什么不从它继承呢?只要不添加任何数据成员,就不需要虚拟析构函数,因此通过继承操作将删除大量重复的代码,否则您将无法编写这些代码。@ZacHowland True,这将大大减少我必须进行的更改。我会试试的。请记住,由于STL容器没有虚拟析构函数,所以您不想添加数据成员(因此您必须将模板修改为类似
template-circular\u-deque:public-std::deque{…}
@ZacHowland谢谢,让它工作并继承了deque。非常感谢,它现在已经编译好了。我会在可能的时候接受答案,时间还不够长。