读书人

重载函数模板做类模版的友员出错,该怎

发布时间: 2012-06-11 17:42:22 作者: rapoo

重载函数模板做类模版的友员出错

C/C++ code
//model1.h#include <iostream>//  声明部分template <class Type>class QueueItem;template <class Type>std::ostream &operator<<(std::ostream,QueueItem<Type>&);//////////////////////////////////////////////////////////template <class Type>class QueueItem{    friend std::ostream& operator<<(std::ostream&,QueueItem<Type>&);public:    QueueItem(const Type &t)        :item(t)    {        next=0;    }private:    Type item;    QueueItem *next;};

C/C++ code
//model1.cpp#include <iostream>#include "model1.h"template <class Type>std::ostream& operator<<(std::ostream &os,QueueItem<Type> qi){    os<<"自定义COUT"<<std::endl;    os<<qi.item;    return os;}

C/C++ code
#include <iostream>#include "model1.h"int main(){    QueueItem<int> qi(3);        //std::cout<<qi;//如果加了这句就会出错为什么?    system("pause");    return 0;}

出错信息:
main.obj : error LNK2019: 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 QueueItem<int> &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$QueueItem@H@@@Z) referenced in function _main


[解决办法]
模板类的声明和实现只能放在一个文件中,不能分开

读书人网 >C++

热点推荐