首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于基于模板兑现的链表为什么编译通不过

2013-08-10 
关于基于模板实现的链表为什么编译通不过啊#include iostream#include stringusing namespace stdtem

关于基于模板实现的链表为什么编译通不过啊
#include <iostream>
#include <string>
using namespace std;
template<class T>
class List{
private:
struct node{
T data;
node* next;
}*head,*tail;
public:
List(){
head=tail=NULL;
}
~List(){
node* curr=head,*p;
while (curr!=NULL)
{
p=curr;
curr=curr->next;
delete p;
}
head=tail=NULL;
}
void inserthead(T *item){
node *p;
p=new node;
p->next=head;
p->data=*item;
head=p;
if(tail==NULL)
tail=p;
}
void inserttail(T * item){
node *p;
p=new node;
p->next=NULL;
p->data=*item;
if(head==NULL)
head=tail=p;
else
tail=p;
}
T get(){
T temp;
node *p=head;
temp=head->data;
if(head==tail)
head=tail=NULL;
else
head=head->next;
delete p;
return temp;
}
};

class Person{
private:
string name;
int score;
public:
Person(string n,int s):name(n),score(s){}
void show(){
cout<<"name is "<<name<<"/n"<<"score is "<<score<<endl;
}
};

void main()
{
Person p1("ldh",90),p2("lm",80),p3("lj",60);
List<int> l;
List<Person> lis=List<Person>();
lis.inserthead(&p1);
lis.inserthead(&p2);
lis.inserttail(&p3);
Person p=lis.get();
p.show();
}
[解决办法]
这段代码看的真心别扭,


List(){
head=tail=NULL;
}
~List(){
node* curr=head,*p;
while (curr!=NULL)
{
p=curr;
curr=curr->next;
delete p;
}
head=tail=NULL;
}

[解决办法]
报错很清楚啊,struct node没写构造函数

struct node{
    node(){};
    T data;
    node* next;


}*head,*tail;



修改完以后还是会报错
d:\workspaces\vc\test\test\ttt.cpp(47): error C2512: “Person”: 没有合适的默认构造函数可用

你的person类的构造函数为Person(string n,int s):name(n),score(s){}
而你在模板类里面的构造函数,T data 没有传入参数也就是没找到对应构造函数,创建对象失败
[解决办法]
代码太乱了!

热点排行