不要试图通过反复试验和猜测语法来学习 C++,读一本好书。
template <typename TElement>
struct list{
这声明了一个名为的结构模板list
,它有一个模板参数 ,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;
这试图声明一个 type 的对象list
,类似于以下语法:
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
不是一种类型,所以它不起作用。此外,您应该避免养成在一行中声明多个变量的坏习惯。写的更清楚:
int* p1;
int* p2;
代替
int *p1, *p2;
另外,你确定你想要指针数组吗?由于您显然不知道自己在做什么,因此使用为您工作的标准容器类型会更明智。