Je pense que ma question est simple et claire:Comment surcharger correctement la conversion de la classe de base pour hériter
Je classe de base AbstractMatrix, et la sous-classe de celui-ci Matrix, et je veux faire une conversion simple:
namespace mtrx {
/* mycode */
class AbstractMatrix {
public:
/* -//- */
operator Matrix();
/* -//- */
}
class Matrix : public AbstractMatrix {
/* -//- */
}
}
AbstractMatrix.cpp:
AbstractMatrix::operator Matrix(){
return Matrix(data);
}
compilateur
donne un message:
Matrix.h:39:12: error: expected type-specifier before ‘Matrix’
operator Matrix();
^
Qu'est-ce que je fais mal? Est-il possible de faire de telles conversions? Je pense que oui, parce que je veux juste faire le constructeur basé sur superclasse mais sans syntaxe ennuyeuse et je besoin implicite
Merci
Je suis plus curieux de savoir pourquoi vous avez besoin de faire cela? Quel est le problème que l'opérateur est censé résoudre? Vous ne pouvez pas avoir une fonction "getter" virtuelle qui renvoie un pointeur "AbstractMatrix"? Ou peut-être utiliser [le CRTP] (https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) pour connaître la classe enfant? –
En ce qui concerne votre problème, vous * savez * que les symboles doivent être déclarés (ou parfois même définis) * avant * d'utiliser les symboles? –
par exemple pour foo (Matrice A); si je fais quelque chose comme ce foo (B) où B est AbstractMatrix, B serait conversé à la classe Matrix. Merci pour vos conseils, j'ai récemment commencé à apprendre le C++ et je vais vous parler des fonctions virtuelles et du CRTP, peut-être que ça va m'aider. – verganz