模板 class 如何成为 C++ 中同一类型 T 的另一个模板 class 的属性?
How can a template class be an attribute of another template class of the same type T in c++?
我有一个模板 class Tripla(列表结构的节点)和另一个模板 class Lista.我想让它们通用,以便将来可以重复使用,但是我不确定如何将数据类型设置为 class Lista 中的 Tripla 对象。
template <class T>
class Tripla
{
public:
T element;
Tripla *anterior;
Tripla *siguente;
Tripla();
.................other functions/procedures
};
template <class T>
class Lista
{
private:
Tripla<T> *primer; // or would this simple be Tripla *primer??
Tripla<T> *ultimo;
public:
Lista();
~Lista();
void insertar_principio(T);
void menu();
.................other functions/procedures
};
template <class T>
void Lista<T>::insertar_principio(T el)
{
if (primer == NULL)
{
primer = new Tripla<T>; // would this be primer = new Tripla??
ultimo = primer;
primer->element=el;
}
else
{
Tripla<T> *aux = primer; // would this be Tripla *aux = primer??
primer = new Tripla;
primer->element = el;
aux->anterior = primer;
primer->siguente = aux;
}
}
一些编译错误包括无法将 Tripla*
转换为 Tripla<T>*
和 "error C2955: 'Tripla' : use of class template requires template argument list"。
我无法理解如何为两者设置相同的数据类型。
例如,从 main.cpp,我想要
Lista list<int>.menu()
这将自动使 Tripla *primer 和 *ultimo 与 int 一起工作。
您在某些地方缺少一些模板参数。首先:
Tripla *anterior;
Tripla *siguente;
应该是:
Tripla<T> *anterior;
Tripla<T> *siguente;
然后:
primer = new Tripla;
应该是:
primer = new Tripla<T>;
另请注意,标准库中已经存在链表(甚至双向链表)实现:std::forward_list
用于单链表,std::list
用于双向链表。
我有一个模板 class Tripla(列表结构的节点)和另一个模板 class Lista.我想让它们通用,以便将来可以重复使用,但是我不确定如何将数据类型设置为 class Lista 中的 Tripla 对象。
template <class T>
class Tripla
{
public:
T element;
Tripla *anterior;
Tripla *siguente;
Tripla();
.................other functions/procedures
};
template <class T>
class Lista
{
private:
Tripla<T> *primer; // or would this simple be Tripla *primer??
Tripla<T> *ultimo;
public:
Lista();
~Lista();
void insertar_principio(T);
void menu();
.................other functions/procedures
};
template <class T>
void Lista<T>::insertar_principio(T el)
{
if (primer == NULL)
{
primer = new Tripla<T>; // would this be primer = new Tripla??
ultimo = primer;
primer->element=el;
}
else
{
Tripla<T> *aux = primer; // would this be Tripla *aux = primer??
primer = new Tripla;
primer->element = el;
aux->anterior = primer;
primer->siguente = aux;
}
}
一些编译错误包括无法将 Tripla*
转换为 Tripla<T>*
和 "error C2955: 'Tripla' : use of class template requires template argument list"。
我无法理解如何为两者设置相同的数据类型。 例如,从 main.cpp,我想要
Lista list<int>.menu()
这将自动使 Tripla *primer 和 *ultimo 与 int 一起工作。
您在某些地方缺少一些模板参数。首先:
Tripla *anterior;
Tripla *siguente;
应该是:
Tripla<T> *anterior;
Tripla<T> *siguente;
然后:
primer = new Tripla;
应该是:
primer = new Tripla<T>;
另请注意,标准库中已经存在链表(甚至双向链表)实现:std::forward_list
用于单链表,std::list
用于双向链表。