我已经定义了一个模板类,并以这种方式重载了一个运算符:
template<class T = bool>
class SparseMatrix
{
public:
SparseMatrix(int msize);
//Multiplication by vectors or matrices
SparseMatrix<double> operator *(SparseMatrix<T> &s);
//Matrix exponentiation
SparseMatrix<double> pow(int n);
};
我认为,运营商的特殊形式并不重要。在运算符重载的情况下,现在我可以执行以下操作:
int main(void)
{
int i;
SparseMatrix<bool> s = SparseMatrix<bool>(4);
SparseMatrix<bool> t = SparseMatrix<bool>(4);
//Here goes some code to fill the matrices...
SparseMatrix<double> u = t*s; //And then use the operator
return 0;
}
这非常有效。没有错误,它返回正确的结果等等。但是现在,我想以这种方式填充类的pow
方法:
template<class T>
SparseMatrix<double> SparseMatrix<T>::pow(int n)
{
if (n == 2)
{
return (this * this); //ERROR
}
else
{
int i=0;
SparseMatrix<double> s = this * this;
while (i < n-2)
{
s = s * this;
i++;
}
return s;
}
}
但是,当我转到main
并撰写SparseMatrix<double> u = t.pow(2);
之类的内容时,我收到错误消息invalid operands of types 'SparseMatrix<bool>*' and 'SparseMatrix<bool>*' to binary 'operator*'
。如前所述,乘法很好地定义了bool
矩阵,那么,为什么编译器会抱怨?我对this
的使用不好吗?我该如何解决这个错误?
感谢您的帮助。
答案 0 :(得分:3)
this
是指向对象的指针,而不是对象本身。 Dereferincing this
应该可以解决问题。