當函式模板中過載友元函式時,需要進行前置宣告

2021-08-20 03:41:55 字數 499 閱讀 7900

#includeusing std::cout;

using std::endl;

using std::ostream;

templateclass complex;//進行類的前置宣告

templateostream &operator<

template//友元函式的前置宣告

class complex

;

當沒有進行前置宣告時,會報該錯誤 error: declaration of 『operator<

深究其具體原理,是在編譯生成彙編檔案時出了問題

而類模板,是在編譯時生成兩次,第一次生成類頭,第二次例項化。

而友元運算子過載,是全域性函式,導致模板類無法找到對應的友元函式。

所以需要進行前置宣告,進行唯一前置繫結操作。

當函式模版遇上函式過載

demo 1 include using namespace std 讓 型別引數化 方便程式設計師進行編碼 泛型程式設計 template 告訴c 編譯器 我要開始泛型程式設計了 看到t,不要隨便報錯 template void myswap t a,t b void myswap int a,c...

當函式模版遇上函式過載

demo 1 include using namespace std 讓 型別引數化 方便程式猿進行編碼 泛型程式設計 template 告訴c 編譯器 我要開始泛型程式設計了 看到t,不要隨便報錯 template void myswap t a,t b void myswap int a,cha...

符號過載函式 友元函式

檔名稱 test.cpp 完成日期 2016年5月14日 問題描述 請用類的友元函式,定義複數類過載運算子 使之能用於複數的加減乘 include using namespace std class complex complex double r,double i friend complex o...