C++输出运算符重载函数模板报错
//单链表类头文件#ifndef_dlblmb_h#define_dlblmb_h#include<iostream>usingnamespacestd;//节点、链表类...
//单链表类头文件
#ifndef _dlblmb_h
#define _dlblmb_h
#include<iostream>
using namespace std;
//节点、链表类模板,输出函数模板声明
template<class T> class Node;
template<class T> class Linklist;
template<class TT> ostream& operator<<(ostream&,const Linklist<TT>&);
//定义节点类模板
template<class T>
class Node{
friend ostream& operator<<(ostream&,const Linklist<T>&);
friend class Linklist<T>;
private:
T value;
Node<T>* next;
public:
Node(T& v,Node<T>* n=NULL):value(v),next(n){}
Node():next(NULL){}
};
//定义链表类模板
template<class T>
class Linklist{
friend ostream& operator<<(ostream&,const Linklist<T>&);
protected:
Node<T>* head;
public:
Linklist(){head=new Node<T>;}
~Linklist();
void create(const T& flag);
};
//creat函数定义
template<class T>
void Linklist<T>::create(const T& flag){
T tmp;
Node<T> *p,*last=head;
cout<<"请输入链表数据,"<<flag<<"表示结束"<<endl;
while(1){
cin>>tmp;
if(flag==tmp) break;
p=new Node<T>(tmp);//申请新空间
last->next=p;//将前一个结点next指向后一个结点
last=p;//结点last指向新申请空间
}
}
//链表类析构函数定义
template<class T>
Linklist<T>::~Linklist(){
Node<T> *p=head,*q;
while(p){
q=p->next;//释放前一个结点之前记录其next
delete p;//释放当前结点
p=q;//将p指向下一个结点
}
}
//输出运算符重载定义
template<class TT>
ostream& operator<<(ostream& os,const Linklist<TT>& obj){
Node<TT>* p=obj.head;
while(p){
os<<p->value<<" ";
p=p->next;
}
os<<endl;
return os;
}
#endif
//应用
#include"dlblmb.h"
void main(){
Linklist<int> intlist;
intlist.create(0);
// cout<<intlist;
}
当使用cout<<intlist就报错
1>123.obj : error LNK2001: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Linklist<int> const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$Linklist@H@@@Z)
1>C:\Users\fangpeng\Desktop\dlblmb\Debug\dlblmb.exe : fatal error LNK1120: 1 unresolved externals
将其注释掉编译通过,求问题所在,谢谢! 展开
#ifndef _dlblmb_h
#define _dlblmb_h
#include<iostream>
using namespace std;
//节点、链表类模板,输出函数模板声明
template<class T> class Node;
template<class T> class Linklist;
template<class TT> ostream& operator<<(ostream&,const Linklist<TT>&);
//定义节点类模板
template<class T>
class Node{
friend ostream& operator<<(ostream&,const Linklist<T>&);
friend class Linklist<T>;
private:
T value;
Node<T>* next;
public:
Node(T& v,Node<T>* n=NULL):value(v),next(n){}
Node():next(NULL){}
};
//定义链表类模板
template<class T>
class Linklist{
friend ostream& operator<<(ostream&,const Linklist<T>&);
protected:
Node<T>* head;
public:
Linklist(){head=new Node<T>;}
~Linklist();
void create(const T& flag);
};
//creat函数定义
template<class T>
void Linklist<T>::create(const T& flag){
T tmp;
Node<T> *p,*last=head;
cout<<"请输入链表数据,"<<flag<<"表示结束"<<endl;
while(1){
cin>>tmp;
if(flag==tmp) break;
p=new Node<T>(tmp);//申请新空间
last->next=p;//将前一个结点next指向后一个结点
last=p;//结点last指向新申请空间
}
}
//链表类析构函数定义
template<class T>
Linklist<T>::~Linklist(){
Node<T> *p=head,*q;
while(p){
q=p->next;//释放前一个结点之前记录其next
delete p;//释放当前结点
p=q;//将p指向下一个结点
}
}
//输出运算符重载定义
template<class TT>
ostream& operator<<(ostream& os,const Linklist<TT>& obj){
Node<TT>* p=obj.head;
while(p){
os<<p->value<<" ";
p=p->next;
}
os<<endl;
return os;
}
#endif
//应用
#include"dlblmb.h"
void main(){
Linklist<int> intlist;
intlist.create(0);
// cout<<intlist;
}
当使用cout<<intlist就报错
1>123.obj : error LNK2001: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Linklist<int> const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$Linklist@H@@@Z)
1>C:\Users\fangpeng\Desktop\dlblmb\Debug\dlblmb.exe : fatal error LNK1120: 1 unresolved externals
将其注释掉编译通过,求问题所在,谢谢! 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询