我试图实现一个矩阵类,该类可以处理实矩阵和复矩阵。当我尝试重载乘法运算符时遇到问题。具体来说,当我尝试乘以一个复合矩阵的双重矩阵(按此顺序)。结果应该是复杂的,但*运算符是在这种情况下的双重矩阵的成员,我不明白如何返回一个复杂的矩阵(我试过使用朋友操作符,这似乎并不工作)。下面是相关的代码片段: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