重载函数模板做类模版的友员出错
- 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
[解决办法]
模板类的声明和实现只能放在一个文件中,不能分开