0
最近我試圖用模板實現續集。這是導致用模板實現雙轉移的問題
#pragma once
#include <iostream>
using namespace std;
template<typename Type>
struct Node {
Node();
Node<Type>* next = NULL;
Node<Type>* prev = NULL;
Type data;
};
template<typename Type>
class deque{
private:
Node<Type>* front = NULL;
Node<Type>* back = NULL;
public:
deque(Type key);
~deque();
Node<Type>* back();
Node<Type>* front();
int size();
bool empty();
void push_front(Type key);
void push_back(Type key);
void pop_front();
void pop_back();
void print_in_order();
};
template<typename Type>
deque<Type>::deque(Type key)
{
if (front != NULL || back != NULL)
return
else
{
front = new Node<Type>();
front->data = key;
prev = front;
}
}
template<typename Type>
deque<Type>::~deque()
{
Node<Type>* delPtr;
while (front->prev != NULL)
{
delPtr = front;
cout << "Deleted " << front->data<<endl;
front = front->prev;
delete delPtr;
}
back = NULL;
delete front;
}
template<typename Type>
Node<Type>* deque<Type>::back()
{
if(back!= NULL)
return back;
else
return NULL
}
template<class Type>
Node<Type>* deque<Type>::front()
{
return front;
}
template<typename Type>
int deque<Type>::size()
{
int counter = 0;
Node<Type>* temp = front;
while (temp->back != NULL)
{
counter++;
temp = temp->back;
}
return counter;
}
template<typename Type>
bool deque<Type>::empty()
{
if (front == NULL && back == NULL)
return true;
else
return false;
}
template<typename Type>
void deque<Type>::push_front(Type key)
{
Node<Type>* temp = new Node<Type>();
temp->data = key;
temp->prev = front;
front->next = temp;
front = temp;
}
template<typename Type>
void deque<Type>::push_back(Type key)
{
Node<Type>* temp = new Node<Type>();
temp->data = key;
temp->next = back;
back->prev = temp;
back = temp;
}
template<typename Type>
inline void deque<Type>::pop_front()
{
if (front != NULL) {
Node<Type>* delPtr = front;
front = front->prev;
front->next = NULL;
delete delPtr;
}
else
cout << "There is no front in empty deque" << endl;
}
template<typename Type>
void deque<Type>::pop_back()
{
if (back != NULL) {
Node<Type>* delPtr = back;
back = back->next;
back->prev = NULL;
delete delPtr;
}
else
cout << "There is no back in empty deque " << endl;
}
template<typename Type>
void deque<Type>::print_in_order()
{
if (front == NULL)
return;
Node<Type> temp = front;
while (temp->prev != NULL) {
cout << temp->data << " ";
temp = temp->prev;
}
cout << endl;
}
template<typename Type>
inline Node<Type>::Node()
{
}
然後一些代碼來檢查是否正常工作
int main(){
deque<int> qq(1);
qq.push_front(2);
qq.push_front(3);
qq.print_in_order();
return 0;
}
此代碼不希望編譯。我試圖尋找類似的項目或錯誤,並找不到有用的東西。因此,如果有人能夠解釋發生了什麼問題,那將是非常好的。 大部分錯誤都是一樣的。例如,不允許使用back()
或front()
,因爲它們不是函數,也不是靜態成員。或者back()
和front()
作爲類模板的成員不能接收類型的函數。希望有人能幫忙。
「此代碼不想編譯」 - 請包含錯誤。另外 - 這是**遠**從*最小*示例 – Fureeish
順便說一句 - 即使沒有錯誤,我可以看到,你有重複的聲明......在'私人'你有'節點 * front',這是一個指針,並且在'public'中有一個名爲'front'的方法。不能處理重載的重名,在這種情況下,你不是 –
Fureeish
這是一個雙向鏈表。當您將新節點插入到雙向鏈接列表中時,您有4個要更新的鏈接。你只更新2.另外,你的前面和後面的指針似乎從來沒有引用相同的鏈表。 –