学习笔记-----C++模板类中友元函数重载输出运算符时提示无法解析的外部符号解决方案
生活随笔
收集整理的這篇文章主要介紹了
学习笔记-----C++模板类中友元函数重载输出运算符时提示无法解析的外部符号解决方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天在寫單向鏈表實現線性表的時候打算重載輸出運算符用來將線性表輸出,結果無奈又遇到了問題。
大致代碼如下
<pre name="code" class="cpp"> template<class T> class chainList : public linearList<T> {friend ostream& operator<<(ostream & out, const chainList<T> & rhs); public:...... private:...... };//友元函數實現的實現 template<class T> ostream & operator<<(ostream & out, const chainList<T> & rhs) {...... }運行的時候編譯器報錯說 無法解析的外部符號
想來想去也只能使友元函數出了問題,于是果斷百度了解了一下
友元函數雖然可以訪問類內部的成員,但是它相對于類是獨立的,它的實現不能依賴類。代碼中用到模板類template<class T> 而在類內聲明友元函數的時候也用到了<T>,所以此時友元函數是依賴于類的實現而實現的,編譯器才會報錯。
解決方法有兩個
第一種:可以將友元函數的實現放在類的內部
第二種:在類的內部聲明友元函數的時候在之前為它單獨配一個模板類型,然后在外部實現
template<class T> class chainList : public linearList<T> {template<typename U>friend ostream& operator<<(ostream & out, const chainList<U> & rhs); public:...... private:...... };//友元函數實現的實現 template<typename U> ostream & operator<<(ostream & out, const chainList<U> & rhs) {...... }
總結
以上是生活随笔為你收集整理的学习笔记-----C++模板类中友元函数重载输出运算符时提示无法解析的外部符号解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记-----关于C++中类的成员函
- 下一篇: C++模板类的虚函数成员