錯誤資訊如下
matrix.h:10:56: warning: friend declaration 『std::ostream& operator<<(std::ostream&, const matrix&)』 declares a non-template function [-wnon-template-friend]
friend ostream& operator<< (ostream&, const matrix&);
在csdn上找到 這篇部落格,然後根據這篇部落格進行修改
首先按照「模板類的約束模板友元」型別更改,原來的寫法是「非模板友元」
friend ostream& operator<< <>(ostream&, const matrix&);
之後出現如下錯誤
matrix.h:10:18: error: template-id 『operator<< <>』 for 『std::ostream& operator<<(std::ostream&, const matrix&)』 does not match any template declaration
friend ostream& operator<< <>(ostream&, const matrix&);
這個錯誤是因為我之前沒有申明這個友元函式,所以不能或爆出這個錯誤。
之後在類宣告之前加入如下語句
template class matrix;
template ostream& operator<<(ostream&, const matrix&);
之前的錯誤就直接消失了總結
在呼叫模板的類的友元函式時,需要在函式名後面加乙個< >
將友元函式變成__模板類的約束模板友元__
使用友元函式的時候需要在類外部進行宣告,不然會出現__錯誤2__
參考部落格中的第三類友元函式:模板類的非約束模板友元,在類的內部宣告友元,每個模板函式(類)具體化都是每個類具體化的友元,對於非約束友元,友元模板型別引數與模板型別引數是不同的
模板類的 友元模板函式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 include include usingnamespacestd template classt c...
模板類的 友元模板函式
模板類的 友元模板函式 第二名 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 include include usingnamespacestd te...
類模板的模板友元函式定義
類模板的模板友元函式定義有2種方式 1.將友元模板函式直接定義在類模板中。這種方式比較簡單直接。2.將友元模板函式宣告在類模板中,定義在類模板之外。這種方式的寫法,如果不小心,通常會出現編譯沒問題,鏈結時無法解析的錯誤。以下是乙個簡單的正確的例子 1 include 2 include 3 4 te...