,该符号已经在_main中被引用

求助,该符号已经在_main中被引用
#include<iostream>
using namespace std;
template<class R>
struct Node
{
R data;
Node<R> *next;
};
template<class T>
class Chain
{
friend void XMergeList(Chain<T> La,Chain<T> Lb,Chain<T> Lc);
public:
Chain();
~Chain();
bool ListPush(T data);  //向链表头添加元素
void ListTravel();          //对链表的每个元素进行遍历
void ListDestory();       //删除链表中的每个元素
protected:
private:
Node<T> *head;
static int amount;
};
template<class T>  
int Chain<T>::amount;
template<class T>
Chain<T>::Chain()
{
head=new Node<T>;
head->next=NULL;
head->data=NULL;
amount=0;
}
template<class T>
Chain<T>::~Chain()
{
this->ListDestory();
amount=0;  //节点个数变为0
}//通过析构函数来调用链表的销毁函数
template<class T>
bool Chain<T>::ListPush(T data)
{
Node<T> *p=head,*newN;
int i=0;

while (p->next!=NULL)
{
p=p->next;
}
newN=new Node<T>;
newN->data=data;
newN->next=NULL;
p->next=newN;

amount++; //节点个数加一
return true;
}//新节点放在链表的最后
template<class T>
void Chain<T>::ListTravel()
{
Node<T> *p=head->next;

cout<<"TravelBegin"<<endl;
while (p!=NULL)
{
cout<<p->data<<"\t";
p=p->next;
}
cout<<"\nTravelEnd"<<endl;
}//链表元素的遍历
template<class T>
void Chain<T>::ListDestory()
{
Node<T> *p=head->next,*prior_p=head;

while (p!=NULL)
{
delete prior_p;
prior_p=p;
p=p->next;
}
delete prior_p;
}//链表的删除
template<class T>
void XMergeList(Chain<T> La,Chain<T> Lb,Chain<T> Lc)
{
//已知链表La和Lb的元素按非递减的顺序排列
//归并链表La和Lb得到新的链表Lc,Lc的元素也是非递减排列

Node<T> *pa,*pb,*pc;

pa=La.head->next;
pb=Lb.head->next;
pc=Lc.head;
while (pa&&pb)
{
if (pa->data<=pb->data)
{
pc->next=pa;
pc=pc->next;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pc->next;
pb=pb->next;
}
}

pc->next=pa?pa:pb;

La.head->next=NULL;
Lb.head->next=NULL;
}//链表的合并函数
int main()
{
Chain<int> a,b,c;

for (int i=0;i<3;i++)
{
a.ListPush(i+1);
}
a.ListTravel();

for (int i=0;i<3;i++)
{
b.ListPush(i+1);
}
b.ListTravel();

XMergeList(a,b,c);
c.ListTravel();

return 0;
}

用c++做的一个链表合并的算法,但是报错,错误为,该符号已经在_main中被引用

请教一下,这是怎么回事?
C++ 链表 模版类

------解决方案--------------------
链接错误而已,因为参数类型的问题,找不到对应的函数。因为你传递的是Chain<int>类型,但这个是一个整体,而接收的虽然是Chain<T>,看上去是一样的,却是拆成两部分的,编译器无法识别。你需要手动指明类型:
XMergeList<int>(a,b,c);
还有一个问题是没有用引用,所以下面的输出也会有问题,改成这样:
void XMergeList(Chain<T>& La,Chain<T>& Lb,Chain<T>& Lc)