[解決済み] C++テンプレート - LinkedList
質問
EDIT -- 以下回答、角度のついた中括弧を見逃していました。ありがとうございました。
私は、他のプログラムで使用できる、初歩的な単一リンクリストを書こうとしています。私はそれが組み込みとユーザー定義の型を扱うことができることを望みます、つまりそれはテンプレート化されなければなりません。
このため、私のノードもテンプレート化する必要があります。なぜなら、ノードに格納される情報が分からないからです。私は次のようにノード・クラスを書きました。
template <class T> class Node
{
T data; //the object information
Node* next; //pointer to the next node element
public:
//Methods omitted for brevity
};
私のリンクリストクラスは別のクラスで実装されており、リストの末尾に新しいノードを追加する際にノードをインスタンス化する必要があります。私はこれを次のように実装しました。
#include <iostream>
#include "Node.h"
using namespace std;
template <class T> class CustomLinkedList
{
Node<T> *head, *tail;
public:
CustomLinkedList()
{
head = NULL;
tail = NULL;
}
~CustomLinkedList()
{
}
//Method adds info to the end of the list
void add(T info)
{
if(head == NULL) //if our list is currently empty
{
head = new Node<T>; //Create new node of type T
head->setData(info);
tail = head;
}
else //if not empty add to the end and move the tail
{
Node* temp = new Node<T>;
temp->setData(info);
temp->setNextNull();
tail->setNext(temp);
tail = tail->getNext();
}
}
//print method omitted
};
私は以下のようにドライバ/テストクラスを設定しました。
#include "CustomLinkedList.h"
using namespace std;
int main()
{
CustomLinkedList<int> firstList;
firstList.add(32);
firstList.printlist();
//Pause the program until input is received
int i;
cin >> i;
return 0;
}
しかし、コンパイル時にエラーが発生します。 error C2955: 'Node' : クラステンプレートの使用にはテンプレート引数リストが必要です。 - これは、私のaddメソッドにある次の行を指しています。
Node* temp = new Node<T>;
私のドライバクラスで作成されたときにリンクリストに渡されたので、なぜこれが型に関する情報を持っていないのか理解できません。 Nodeに型情報を渡すにはどうしたらいいのでしょうか?
別のクラスではなく、プライベートなノード構造体を作成し、両方のクラスのメソッドを1つのファイルにまとめるべきでしょうか。この方法で問題が解決するかどうかは分かりませんが、そうなる可能性はあると思います。しかし、可能であれば、別々のクラスを作成する方が良いと思います。
アンドリューさん、ありがとうございます。
解決方法は?
試してみたいこと
Node<T>* temp = new Node<T>;
また、リストの設計のヒントを得るには、もちろんstd::listを見ればいいのですが、ちょっと大変なこともあります。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] テンプレートにおける'typename'と'class'の違い?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] リンクリストの途中への挿入はなぜO(1)なのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。