【模板友元函数】菜鸟提问
我的头文件中是类模板和函数
- C/C++ code
#ifndef Node_H#define Node_Htemplate<typename T>class Node{public: Node( int =0 ); Node( const Node& ); ~Node(); friend istream& operator>> ( istream&, Node<T>& ); friend ostream& operator<< ( const ostream&, const Node& );protected: Node* next; T number;};其中友元函数代码
- C/C++ code
template<typename T>istream& operator>> ( istream& input, Node<T>& temp ){ Node *p = temp.next; for( cin>>temp.number; p!=NULL; p=p->next ) cin >> p->number; return input;}template<typename T>ostream& operator<< ( const ostream& output, const Node<T>& temp ){ Node *p = next; for( cout << number; p!=NULL; p=p->next ) cout << " -> " << number; return output;}main函数
- C/C++ code
#include<iostream>#include<ctime>using namespace std;#include"myList.h"int main(){ Node<int> a(5); cin >> a; cout << a;}出错信息
1>main.obj : error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > const &,class Node<int> const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@ABV01@ABV?$Node@H@@@Z),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class Node<int> &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$Node@H@@@Z),该符号在函数 _main 中被引用
谢谢啊
[解决办法]
1.将友元函数的实现放到类里面去。
2.或者将声明改为:
template<class S> friend istream& operator>> ( istream&, Node<S>& );
template<class S> friend ostream& operator<< ( const ostream&, const Node<S>& );
[解决办法]
[解决办法]
按我的改,可以运行的