我正在尝试为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;
}
任何人都知道我能在这做什么吗?
答案 0 :(得分:1)
模板类的每个内联成员必须以模板参数列表开头。 IE浏览器。这样:
CircularDeque<class dequeClass>::CircularDeque(int newMax) {
max = newMax;
}
应该是这样的:
template<class dequeClass>
CircularDeque<dequeClass>::CircularDeque(int newMax) {
max = newMax;
}
为所有课外定义执行此操作。
答案 1 :(得分:0)
将函数定义内联或以模板声明为前缀,如下所示:
template<typename dequeClass>
CircularDeque<class dequeClass>::CircularDeque(int newMax) {
max = newMax;
}