0
我想創建LinkedList類與多態性和從堆棧和隊列頭文件繼承。這是我第一次嘗試使用模板,但不斷收到「類模板已被定義」或「不允許抽象類類型」之類的錯誤。我如何實現一個模板,因爲我顯然是不正確地做到這一點?具有多重繼承的C++ LinkedList模板?
// LinkedList.h File
#include "Stack.h"
#include "Queue.h"
#include "Node.h"
using namespace std;
template <typename T>
class LinkedList : public Queue<T>, public Stack<T>
{
public:
LinkedList();
~LinkedList(void);
protected:
Node<T> *first;
Node<T> *last;
int numItems;
};
// LinkedList.cpp File
#include "LinkedList.h"
using namespace std;
template <typename T>
class LinkedList
{
LinkedList()
{
first = NULL;
last = NULL;
numItems = 0;
}
LinkedList::~LinkedList(void)
{
while (first != NULL)
{
Node* cur = first;
first = first->next;
delete cur;
}
}
LinkedList::clear() {}
LinkedList::size() {}
// Stack Functions
LinkedList::push(T item) {}
LinkedList::pop() {}
LinkedList::top() {}
// Queue Functions
LinkedList::enqueue(T item) {}
LinkedList::dequeue() {}
LinkedList::peek() {}
}
// Stack.h File (Queue is the same except push/pop/top = enqueue/dequeue/peek)
#pragma once
template <typename T> class Stack
{
public:
virtual ~Stack() {}
virtual int size() = 0;
virtual void clear() = 0;
virtual void push(T item) = 0;
virtual T pop() = 0;
virtual T top() = 0;
};
更新的代碼
// LinkedList.h File
#pragma once
#include "Stack.h"
#include "Queue.h"
#include "Node.h"
template <typename T>
class LinkedList : public Queue<T>, public Stack<T>
{
public:
LinkedList();
~LinkedList(void);
void clear();
int size();
void push(T item);
T pop();
T top();
void enqueue(T item);
T dequeue();
T peek();
protected:
Node<T> *first;
Node<T> *last;
int numItems;
};
// LinkedList.cpp File
#include "LinkedList.h"
class LinkedList
{
LinkedList::LinkedList()
{
first = NULL;
last = NULL;
numItems = 0;
}
LinkedList::~LinkedList(void)
{
while (first != NULL)
{
Node* cur = first;
first = first->next;
delete cur;
}
}
LinkedList::clear(){}
LinkedList::size(){}
// Stack Functions
void LinkedList::push(T item){}
T LinkedList::pop(){}
T LinkedList::top(){}
// Queue Functions
void LinkedList::enqueue(T item){}
T LinkedList::dequeue(){}
T LinkedList::peek(){}
}
// Stack.h File (Queue is the same except push/pop/top = enqueue/dequeue/peek)
#pragma once
template <typename T> class Stack
{
public:
virtual ~Stack() {}
virtual int size() = 0;
virtual void clear() = 0;
virtual void push(T item) = 0;
virtual T pop() = 0;
virtual T top() = 0;
};
所以,我要實現我的模板在LinkedList.h文件,並與出作爲一個階級的一部分CPP文件寫我作爲獨立的LinkedList ::使用functionName()? – LF4
@ LF4:常規課程通常是這種情況。在編寫模板時,你需要在頭文件中定義你的函數。無論它們是在班級內還是班外定義的,大多都是無關緊要的,除非定義在班級之外時,您應該聲明它是「內聯」的。 –
我已經包含了我認爲你想解釋的更新代碼。我想我的問題是在哪裏/如何編寫模板類的功能?這一切都在模板中?感謝您的幫助。 – LF4