这是我第一次使用模板。我仅将模板用于结构的元素。
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;
};
我正在模仿结构,但不确定是否应该为类做同样的事情。我不会将元素称为任何函数中的参数,所以我猜不会。我通过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);
}
main.cpp中包含的文件:1:
Proyecto.h:27:错误:'*'标记之前的预期初始化程序
Proyecto.h:35:错误:'ContactPtr'尚未声明为
Proyecto.h:37:错误:'ContactPtr'尚未声明为
Proyecto.h:37:错误:'Contacto'不是类型
Proyecto.h:40:错误:'ContactPtr'尚未声明为
Proyecto.h:42:错误:'ContactPtr'尚未声明为
Proyecto.h:44:错误:'ContactPtr'尚未声明为
Proyecto.h:47:错误:'ContactPtr'没有命名类型
Proyecto.h:52:错误:'Contacto'不是类型
Proyecto.h:54:错误:在'Temp'之前缺少模板参数
答案 0 :(得分:0)
我模仿结构,但不确定是否应该为该类做同样的事情。
答案是,&#34;很可能是&#34;。
您希望能够使用
typedef Contacto* ContactPtr;
以避免使Lista
类模板基于对模板如何工作的不完全理解。上面的代码不是有效的C ++代码,正如您的编译器指出的那样。
Contact
是一个类模板,而不是一个类。因此,您无法为typedef
创建Contact*
。您可以使用:
template <typename T>
using ContactPtr = Contacto<T>*;
但是,您必须使用ContactPtr<T>
,其中T
是有效类型。
为了能够在Contact
中使用ContactPtr
或Lista
,您需要一个模板参数。模板参数可以硬编码为已知类型,也可以使Lista
成为类模板。在后一种情况下,您可以使用Lista
的模板参数来使用Contacto
或ContactPtr
。
template <typename T>
class Lista
{
...
Contacto<T>* Cabeza;
};
或
template <typename T>
class Lista
{
...
ContactPtr<T> Cabeza;
};