我正在嘗試編寫一個deque的容器類來創建一個循環緩衝區(使用deque在這裏很重要,因爲類正在替換一個向量,並且確實需要在這裏使用)。我不想讓容器類專用於特定的雙端隊列;也就是說,我希望該類是模板類,並使用雙端隊列來獲取模板類型。但是,我的代碼在編譯時使用未定義類型錯誤(c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ deque(795):error C2027:使用未定義類型'dequeClass')。將模板傳遞給deque
代碼:
#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;
}
任何人都知道我能做些什麼嗎?
如果你只是想專注一個'的std :: deque'的行爲,爲什麼不從它繼承?只要你不添加任何數據成員,你就不需要虛擬析構函數,所以通過繼承來完成它將刪除很多重複的代碼,否則你最終會寫。 –
@ZacHowland真的,這將顯着減少我必須做的改變。我會試試看。 – demize
請記住,由於STL容器沒有虛擬析構函數,因此不需要添加數據成員(因此您必須將模板修改爲像'template circular_deque:public std :: deque {...};' –