在模板类中使用“this”关键字

时间:2017-10-12 11:30:52

标签: c++ class templates compiler-errors

我已经定义了一个模板类,并以这种方式重载了一个运算符:

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的使用不好吗?我该如何解决这个错误?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

this是指向对象的指针,而不是对象本身。 Dereferincing this应该可以解决问题。