試行錯誤して構文を推測して C++ を学ぼうとするのではなく、良い本を読んでください。
template <typename TElement>
struct list{
これは、テンプレートをインスタンス化する型のエイリアス (テンプレートの本体内のみ) として機能list
する単一のテンプレート パラメーターを持つという struct テンプレートを宣言します。TElement
インスタンス化する場合はlist<int>
、TElement
を参照しint
ます。インスタンス化する場合はlist<char>
、TElement
を参照しchar
ます。等
TElement
したがって、テンプレートをインスタンス化するタイプは、テンプレート定義で置き換えられます。
試したときに得たエラー:
// if I try list<TElement> => list is not a template
template <typename TElement>
struct list<TElement> {
これは有効な構文ではないためです。エラーは、list
あなたが書いた時点でまだlist<TElement>
宣言を終えていないため、テンプレートではないことを示しlist
ているため、コンパイラはそれが何であるかを認識せず、リストを作成できませんリスト テンプレートが定義されていない場合の何かの。
template <typename TElement>
struct list{
TElement data;
struct list *next;
}node_type;
list
これは、次の構文と同様に、 type のオブジェクトを宣言しようとします:
struct A {
int i;
} a; // the variable 'a' is an object of type 'A'
しかし、あなたの場合list
はタイプではなく、テンプレートです。 list<int>
は型ですがlist
、それ自体は有効な型ではありません。「空白を埋める」ときに型を作成できるテンプレートにすぎません。つまり、パラメーターの代わりに型を提供します。TElement
とにかく変数を宣言しようとさえしていなかったようで、やみくもに構文を推測しているだけです。
// also tried node_type<TElement>, other incomprehensible errors
それも役に立ちません。node_type<TElement>
ナンセンスです。変数を宣言したい場合は、型が必要list<int>
です。パラメータは型に置き換えるTElement
必要があります。それ自体は型ではありません。うまくいくことを期待して、構文のランダムなビットをつなぎ合わせようとするのはやめてください。http://www.parashift.com/c++-faq/templates.htmlを読むことから始めることができます
最後の行で:
node_type *ptr[max], *root[max], *temp[max];
node_type
タイプではないので、うまくいきません。また、1 行で複数の変数を宣言するという悪い習慣に陥らないようにする必要があります。次のように書く方がはるかに明確です。
int* p1;
int* p2;
それ以外の
int *p1, *p2;
また、ポインターの配列が必要ですか? 自分が何をしているのかはっきりとわからないので、作業を行う標準のコンテナ タイプを使用する方が賢明です。