我正在尝试为双端队列编写一个容器类以制作循环缓冲区(此处使用双端队列很重要,因为该类正在替换矢量,并且确实需要像此处一样使用)。我不想使容器类特定于特定的双端队列。也就是说,我希望该类成为模板类,并且让双端队列获得模板化类型。但是,我的代码在编译时为我提供了未定义类型的错误(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;
}


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

最佳答案

模板类的每个内联成员必须在模板参数列表的开头。就是这个:

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


应该是这样的:

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


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

关于c++ - 将模板传递给双端队列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18408410/

10-11 01:05