C++ 试图为c+;中的结构元素获取模板+;

C++ 试图为c+;中的结构元素获取模板+;,c++,class,templates,struct,C++,Class,Templates,Struct,这是我第一次使用模板。我只对结构的一个元素使用模板 using namespace std; namespace lulz{ template<typename T> struct Contacto { string Cname; string Apellidos; string NumTel; string email; T sexo; Contacto *Proximo; }; ty

这是我第一次使用模板。我只对结构的一个元素使用模板

    using namespace std;
    namespace lulz{

    template<typename T>
    struct Contacto {
    string Cname;
    string Apellidos;
    string NumTel;
    string email;
    T sexo;
    Contacto *Proximo;
    };
    typedef Contacto* ContactPtr;


    class Lista {
    public:
    Lista();
    ~Lista();
    bool ContactoVacio(ContactPtr Contact1);  
    void InsertContact(ContactPtr& Contact1, Contacto Temp); 
    void BuscarContact(ContactPtr Contact1, string Name, string Lastname);
    void Display(ContactPtr Contact1);
    void Deletes(ContactPtr Contact1);

    ContactPtr Cabeza;
    };
使用名称空间std;
名称空间lulz{
模板
结构联系人{
字符串Cname;
弦阿佩利多斯;
串珠;
字符串电子邮件;
性取向;
接触器*前置器;
};
类型def Contacto*ContactPtr;
Lista类{
公众:
Lista();
~Lista();
bool ContactoVacio(ContactPtr Contact1);
无效插入触点(触点PTR和触点1,触点温度);
void BuscarContact(ContactPtr Contact1,字符串名称,字符串Lastname);
无效显示(ContactPtr Contact1);
无效删除(ContactPtr Contact1);
ContactPtr Cabeza;
};
我正在模板化结构,但不确定是否应该对类执行同样的操作。我没有在任何函数中将元素作为参数调用,因此我猜不会。我通过typedef访问结构

    using namespace std;
    using namespace lulz;

    int main(){

    Lista cabezalista;
    Contacto Temp;
    ContactPtr Cabeza;
    string name, lastname;
    int Choice;
    ifstream entrada;
    Opening(entrada);

    Contacto<string> sexo;

    while(!entrada.eof())
    {
    entrada >> Temp;
    cabezalista.InsertContact(Cabeza,Temp);
    }
使用名称空间std;
使用名称空间lulz;
int main(){
卡贝扎利斯塔;
接触温度;
ContactPtr Cabeza;
字符串名,lastname;
智力选择;
ifstream entrada;
开放(恩特拉达);
性接触;
而(!entrada.eof())
{
恩特拉达>>温度;
卡贝扎利斯塔。InsertContact(卡贝扎,临时);
}
在main.cpp中包含的文件中:1:
Proyecto.h:27:错误:应在“*”标记之前使用初始值设定项
项目h:35:错误:“ContactPtr”尚未声明
项目h:37:错误:“ContactPtr”尚未声明
项目h:37:错误:“Contacto”不是一种类型
项目h:40:错误:“ContactPtr”尚未声明
项目h:42:错误:“ContactPtr”尚未声明
项目h:44:错误:“ContactPtr”尚未声明
Proyecto.h:47:错误:“ContactPtr”未命名类型
项目h:52:错误:“Contacto”不是一种类型
Proyecto.h:54:错误:“Temp”之前缺少模板参数

我正在模板化结构,但不确定是否应该对类执行同样的操作

答案是,“很可能是的”

您希望能够使用

typedef Contacto* ContactPtr;
<> >避免使用<代码> Lista<代码>。一个类模板是基于对模板如何工作的不完全理解。上面没有有效的C++代码,正如编译器指出的。
Contact
是类模板,而不是类。因此,您无法为
Contact*
创建
typedef
。您可以使用:

template <typename T>
using ContactPtr = Contacto<T>*;

模板
Lista类
{
...
ContactPtr Cabeza;
};

欢迎来到Stack Overflow。请花点时间阅读并参考您可以在此处询问的内容和方式。
template <typename T>
class Lista
{
   ...
   Contacto<T>* Cabeza;
};
template <typename T>
class Lista
{
   ...
   ContactPtr<T> Cabeza;
};