我試圖實現一個矩陣類,該類可以處理實矩陣和復矩陣。當我嘗試重載乘法運算符時遇到問題。具體來說,當我嘗試乘以一個複合矩陣的雙重矩陣(按此順序)。結果應該是複雜的,但*運算符是在這種情況下的雙重矩陣的成員,我不明白如何返回一個複雜的矩陣(我試過使用朋友操作符,這似乎並不工作)。下面是相關的代碼片段:C++運算符爲具有實矩陣和復矩陣的矩陣類重載
template <class V> Matrix<T> operator *(const Matrix<V> &b)
{
long i, j, k; T temp; Matrix<T> c(mRows, b.Cols());
for (i = 0; i < mRows; i++)
for (j = 0; j < c.Cols(); j++)
{
for (temp = 0, k = 0; k < mCols; k++)
temp += this->Element(i, k)*b.Element(k, j);
c(i, j) = temp;
}
return c;
}
因此,如果是真實的,B和C是複雜的,C = B 一個工作正常,但C = A B沒有。具體來說,編譯器錯誤會標記「temp + =」行,表示沒有找到需要複雜類型的全局運算符(或者沒有可接受的轉換)。我想避免完全專注於真實和複雜類型的模板,有沒有辦法解決這個問題?
在此先感謝。
要聲明'模板矩陣的operator *(const的矩陣&A,常量矩陣&B)' –
參見[運算符重載(http://stackoverflow.com/questions/4421706/operator-overloading)請。 –
謝謝,但這將不得不宣佈爲朋友操作員,不是嗎?這就產生了一個新問題,即多個操作符匹配操作數。 – DJM123