首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

【模板友元函数】初学者提问

2012-03-28 
【模板友元函数】菜鸟提问我的头文件中是类模板和函数C/C++ code#ifndef Node_H#define Node_Htemplatetype

【模板友元函数】菜鸟提问
我的头文件中是类模板和函数

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>& );

[解决办法]
探讨
1.将友元函数的实现放到类里面去。
2.或者将声明改为:
template<class S> friend istream&amp; operator>> ( istream&amp;, Node<S>&amp; );
template<class S> friend ostream&amp; operator<< ( const ostream&amp;, const Node<S……

[解决办法]
按我的改,可以运行的

热点排行