有關模板的友元函式記錄

2021-10-17 09:48:00 字數 1159 閱讀 1155

錯誤資訊如下

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...