テンプレートを使用して C++ を練習するための一般的なリンク リスト クラスを作成しようとしています。ただし、コンパイル時にエラーが発生し、それらを解決する方法がわかりません。1 つのエラーをデバッグしようとして 2 時間以上費やしましたが、どこにも行きませんでした。MSDN と google にも相談しましたが、どこにも行きませんでした。テンプレートに関しては、私はかなり経験が浅いのではないかと心配しています。関連するコードを以下にリストしました。誰かが私を助けてくれれば幸いです。
LinkedList.h:
#ifndef LINKED_LIST
#define LINKED_LIST
namespace D_DATA_STRUCT {
template <typename T>
class LinkedList {
private:
class LinkedListNode {
public:
T data;
LinkedListNode* next;
LinkedListNode(T data) {
this->data = data;
this->next = 0;
}
};
LinkedListNode* head;
LinkedListNode* tail;
public:
LinkedList();
~LinkedList();
void insert_at_head(T data);
void insert_at_tail(T data);
void insert(T data);
T remove_from_head();
T remove();
};
}
#include "LinkedListImplementation.h"
#endif
LinkedListImplementation.h:
namespace D_DATA_STRUCT {
template <typename T>
LinkedList<typename T>::LinkedList() {
this->head = 0;
this->tail = 0;
}
template<typename T>
LinkedList<typename T>::~LinkedList() {
LinkedListNode* prev, next;
for(prev = this->head; prev != 0; prev = prev->next) {
next = prev->next;
delete prev;
prev = next;
}
}
template<typename T>
void LinkedList<typename T>::insert_at_head(T data) {
LinkedListNode* temp = this->head;
this->head = new LinkedListNode(data);
this->head->next = temp;
if(temp == 0) {
this->tail = this->head;
}
return;
}
template<typename T>
void LinkedList<typename T>::insert_at_tail(T data) {
LinkedListNode* temp = new LinkedListNode(data);
if(this->head == 0) {
this->head = temp;
} else {
this->tail->next = temp;
}
this->tail = temp;
return;
}
template<typename T>
void LinkedList<typename T>::insert(T data) {
this->insert_at_head(data);
return;
}
template<typename T>
T LinkedList<typename T>::remove_from_head() {
if(this->head == 0) {
return 0;
}
LinkedListNode* temp = this->head;
T data = temp->data;
this->head = this->head->next;
delete temp;
if(this->head == 0) {
this->tail = 0;
}
return data;
}
template<typename T>
T LinkedList<typename T>::remove() {
return this->remove_from_head();
}
}
私が得るエラーは次のとおりです。
linkedlistimplementation.h(4): エラー C2143: 構文エラー: ';' がありません '<' の前にlinkedlistimplementation.h(4): エラー C4430: 型指定子がありません - int と見なされます。注: C++ は、default-int をサポートしていません。linkedlistimplementation.h(4): エラー C2988: 認識できないテンプレート宣言/定義です。 'LinkedList' : '`グローバル名前空間'' のメンバーではありません。以前のエラー; コンパイルの停止
「;」には構文エラーがありますが、プログラムはコンパイルされましたが、誤ってlinkedlistimplementationlinkedlist.cppを作成したときにリンクに失敗しました。したがって、テンプレートの構文に問題があると思います。私は多くのドキュメントを調べ、多くのことを試しましたが、率直に言って、何が起こっているのかわかりません。LinkedList:: 内で typename を使用してコンパイルしようとしましたが、それを使用しませんでした。
Microsoft Visual C++ 2010 Express コンパイラも使用しています。
ありがとうございました!