Notre classe text viewer hérite de support à dessin, et cette dernière est une classe abstraite, donc avec des méthodes virtuelles pures.
Cependant, même après avoir redéfini toutes les méthodes dans text viewer et avoir ajouté le mot clé override, la classe text viewer est abstraite et n’est donc pas instenciable.
Qt indique un problème de correspondance entre les méthodes de textviewer.h et leurs définitions dans le .cpp, seulement nous n’avons pas été capable de comprendre pourquoi, et un assistant contacté ce matin non plus. Ce problème persiste quand on défini directement les méthodes concernée dans la classe, sans avoir recourt à une approche modulaire pour cette classe.
Est-ce que quelqu’un sait d’où vient l’erreur? Et sinon est il nécessaire que support à dessin soit abstraite?(car si non, cela réglerait le problème)
Merci beaucoup
Re: Classes support à dessin et textviewer abstraites
Classes support à dessin et textviewer abstraites
Classes support à dessin et textviewer abstraites
Re: Classes support à dessin et textviewer abstraites
Je m'y connais pas vraiment mais les fonctions que vous avez redéfini c'est avec override à la fin de chaque méthode redéfinie Pcq si oui normalement qt devrait vous dire qu'une méthode est écrite override alors qu'elle ne redéfini pas. Je crois que c'est un histoire de const comme différences entre méthodes de textview et support à dessin
Re: Classes support à dessin et textviewer abstraites
Tu nous parles d'un problème de correspondance entre cpp et header, mais avec le contenu de ton post, c'est assez dur à dire. Peux-tu élaborer (attention à ne pas dévoiler votre implémentation en détail)?
Ce pourrait-il que tu n'aies pas exactement les mêmes fonctions dans le header et la source, eg.
HEADER
class A{
public:
virtual void methode(int a) = 0;
};
class A : public B{
public:
virtual void methode(int a) override;
};
SOURCE
void B::methode(size_t a){ ... }
Re: Classes support à dessin et textviewer abstraites
si vous n'avez toujours pas trouvé :
si une classe reste abstraite c'est simplement qu'il lui reste au moins une méthode virtuelle pure. Reste à trouver laquelle : si vous avez clairement redéfinit une méthode virtuelle (attention avec EXACTEMENT le même prototype, y compris l'éventuel const à la fin) c'est que ce n'est pas elle et qu'il faut chercher une autre.
C'est souvent facile à trouver parce que le compilateur vous dit pourquoi vous ne pouvez pas créer d'instance. Il dit qqchose du genre : je ne peux pas créer d'instance de la classe A qui est abstraite en raison de cette méthode : blabla f(truc, machin);
En clair :
- regardez bien le message du compilateur pour trouver la source du problème ;
- vérifiez que vous redéfinissez bien la MEME méthode (et non pas une qui ressemble : argument en moins, const qui manque, ...)
Ajouter le mot clé « override » (à la redéfinition) permet justement de plus facilement détecter ce cas numéro 2