J'ai défini une classe de modèle et la surcharge d'un opérateur, ainsi:Utilisation de « ce » mot-clé dans la classe de modèle
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);
};
La forme particulière de l'opérateur n'a pas d'importance, je pense. Avec l'opérateur surchargé, maintenant je peux faire des choses comme ceci:
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;
}
Cela fonctionne très bien. Pas d'erreur, il renvoie des résultats corrects, etc. Mais maintenant, je veux remplir la méthode pow
de la classe, de cette façon:
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;
}
}
Cependant, quand je vais à l'main
et d'écrire quelque chose comme SparseMatrix<double> u = t.pow(2);
je reçois une erreur indiquant que invalid operands of types 'SparseMatrix<bool>*' and 'SparseMatrix<bool>*' to binary 'operator*'
. La multiplication est bien définie pour les matrices bool
comme je l'ai déjà dit, alors, pourquoi le compilateur se plaint-il? Est-ce que je fais un mauvais usage de this
? Comment puis-je corriger cette erreur?
Nous vous remercions de votre aide.
Vous semblez oublier que 'this' est un * pointeur * vers l'objet. Devrait être très évident si vous lisez réellement le message d'erreur (qui mentionne le type 'SparseMatrix *'). –
BTW, tous 'const' manquent. – Jarod42
Et vous le trouverez beaucoup plus facile et plus efficace si vous implémentez 'operator * =()' ainsi que 'operator *()'. –