我寫了一個矩陣類。我已經重載了operator +,以便用戶可以編寫:matrix + 2.我希望用戶也寫:2 +矩陣。如何在泛型類中使用朋友函數重載運算符?
對於標準格式(即對象調用2),我寫了一個標準的運算符重載函數。有用。
template<typename T>
Matrix<T> Matrix<T>::operator+(const T& rhs) const
{
Matrix result(rows, cols, 0.0);
for (unsigned i = 0; i < rows; ++i)
{
for (unsigned j = 0; j < cols; ++j)
{
result(i,j) = (*this)(i, j) + rhs;
}
}
return result;
}
現在對於其他順序(即2 +矩陣),我已經寫了友元函數:
// Friend Functions that allow the user to write expressions in a different order
template<typename T>
friend Matrix<T> operator+(const T& type, const Matrix<T>& matrix);
和實施爲:
template<typename T>
Matrix<T> operator+(const T& type, const Matrix<T>& matrix)
{
return matrix + type;
}
當我嘗試寫2 +矩陣(在main())中,我得到一些錯誤。
我一直有使用泛型類的朋友函數的問題,坦率地說,我從來沒有明白爲什麼它從來沒有爲我工作。
有人能解釋我在做什麼錯嗎?
錯誤,我得到:
智能感知:無操作「+」匹配這些操作數的操作數類型是:INT +矩陣
嚴重性代碼說明項目文件行錯誤C2244「矩陣::運算符+」:無法將函數定義與現有聲明相匹配
@txtechhelp但朋友功能不是一個成員函數,所以它如何使用Matrix的範圍解析運算符 –
誤讀代碼/問題..道歉..我正在重新閱讀關於朋友/模板的規範,因爲您的問題是一個模板演繹錯誤(即編譯器無法正確推斷模板化的朋友函數)..將發佈相關的答案/評論。 – txtechhelp
如果你的朋友函數是在Matrix類中聲明的,你不能只需在類中進行以下操作:'朋友矩陣運算符+(const T&type,常量矩陣和矩陣){返回矩陣+類型; }'因爲這是一個簡單的操作,並且如果它在標題中,可能會打開一些優化內聯。 – txtechhelp