c++的类中的指针函数的定义及调用有关问题!求大神指点

c++的类中的指针函数的定义及调用问题!求大神指点~
程序一直显示类中的函数没有定义,但是明明定义过了,想不通,求大神指点~

程序如下:
list.h:

#include<iostream>
    #include<fstream>
    using namespace std;



template <class T>
class link;


template <class T>
class list
{
private:
T data;
list<T> *next;
list<T> *head;

public:
// list(T & data,list<T> *next);
// list(list<T> & p);

friend class link;
};



template <class T>
class link
{

public:
// link(){};
// link(link<T> & p);
// ~link();


typename list<T> *creat(list<T> *head);
void show(link<T> *head);
};




list.cpp
    #include<iostream>
    #include"list.h"
    using namespace std;

/****************************************************
函数名:   list<T> *creat(link<T> *head);
函数功能: 创建链表并添加数据;
输入:     data;
输出:     *head;
****************************************************/

/* template <class T>
typename list<T> link<T>::*creat(list<T> *head)
{
int n=0;
list<T> *p1,*p2;                                       //创建指针并申请内存;
p1=new list<T>;                                        
p2=new list<T>;
cout<<"请输入结点数据:"<<endl;
cin>>p1->data;
head=NULL;
while(p1->data != 0)                              //当输入数据为零时认为所有数据输入完毕,停止继续输入;
{
n=n+1;
if(n == 1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=new list<T>;
cout<<"请输入结点数据:"<<endl;
    cin>>p1->data;
}
p2->next=NULL;
return(head);
}






main.cpp:
#include<iostream>
    #include"list.h"
    using namespace std;



void main()
{
int a=1;
link<int> q;
list<int> *t,*s;
while(a>0 && a<11)
{
cout<<"请选择要进行的操作:"<<endl;
cout<<"1、创建链表。      2、显示链表。"<<endl;
cout<<"3、最大数据。      4、最小数据。"<<endl;
cout<<"5、查找结点。      6、删除特定数据。"<<endl;
cout<<"7、升序输出。      8、降序输出。"<<endl;
cout<<"9、结点总数。      10、退出。"<<endl;
cin>>a;


switch(a){
case 1:
s=q.creat(t);                                   //创建链表;
break;
    default:
cout<<"请重新选择!"<<endl;
break;
}
}
return ;
}



显示:
main.obj : error LNK2001: unresolved external symbol "public: class list<int> * __thiscall link<int>::creat(class list<int> *)" (?creat@?$link@H@@QAEPAV?$list@H@@PAV2@@Z)
Debug/LIST.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

c++的类中的指针函数的定义及调用有关问题!求大神指点
------解决思路----------------------
应该是typename惹出来的问题。
------解决思路----------------------
模板类的实现要跟声明放一起,楼主都放到.h文件中
------解决思路----------------------
引用:
Quote: 引用:

模板类的实现要跟声明放一起,楼主都放到.h文件中




好像不是这个原因,因为对于我编写其他的一般的函数来说,就算放在CPP文件里面也是可以用的,不过我试了一下,放在.h文件中定义还是不行。。。好奇怪。。。

模板类跟普通的不一样,因为模板类在编译的时候,未确定类型的时候,这个类其实是不能确定的,如果你有个地方只是引用了头文件,编译器只能确定它的声明罢了,至于类的实现,又在哪里?
如果只是看模板类的CPP代码,只有一对template<T>,这个T是什么类型,编译器又怎么编译?
至于放在一起还出错,那就是其它问题了,并不是说不放在一起就正确了
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

typename list<T> link<T>::*creat(list<T> *head)

你能不能把*和类型放在一起?
typename list<T>* link<T>::creat(list<T> *head)


还有这行前面的
/* template <class T>
这注释都没有闭合,你确定后面的代码参与了编译?

另外,你完全错误的使用了模板类,中间那么多typename是什么情况,先照着书上的示例编程,把格式熟悉了先啊


这里我错了, typename用了不会有错,但是不用也不会有错(在这个情况下)


再次确认了下...typename 仅仅用在 nested dependent type name 前,其他情况下not allowed,因此在这个例子中,还是不应该使用的