Classes support à dessin et textviewer abstraites

Classes support à dessin et textviewer abstraites

par Gaétan Eliott Bardy,
Number of replies: 7
Bonjour
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
In reply to Gaétan Eliott Bardy

Re: Classes support à dessin et textviewer abstraites

par Josué Antoine Maechling,
Textviewer ne devrait absolument pas être une classe abstraite. Vous devriez purement et simplement avoir exactement le même code que dans les exemples sur le graphisme.
Il faudra bien sûr les faire évoluer mais sans pour autant transformer Textviewer en classe abstraite.
Je ne peux que vous conseiller d'aller voir ces exos, tout est donné !
In reply to Gaétan Eliott Bardy

Classes support à dessin et textviewer abstraites

par Gaétan Eliott Bardy,
Justement, le problème est que textviewer et on ne comprend pas pourquoi. Même après avoir copié les exemples sur le graphisme (on a utilisé l’exercice 3) le problème persiste
In reply to Gaétan Eliott Bardy

Classes support à dessin et textviewer abstraites

par Gaétan Eliott Bardy,
Le problème est que que textviewer reste abstraite*
In reply to Gaétan Eliott Bardy

Re: Classes support à dessin et textviewer abstraites

par Mohae Ange Christian N'Guessan,

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 

In reply to Gaétan Eliott Bardy

Re: Classes support à dessin et textviewer abstraites

par Deleted user,

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){ ... }

In reply to Deleted user

Classes support à dessin et textviewer abstraites

par Gaétan Eliott Bardy,
C’est exactement la structure de cette partie de notre programme, mais on a vérifié plusieurs fois que les déclarations entre le header et la source étaient les mêmes. (On a même copié collé puis enlevé override, virtual et rajouté B::)
In reply to Gaétan Eliott Bardy

Re: Classes support à dessin et textviewer abstraites

par Jean-Cédric Chappelier,

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 :

  1. regardez bien le message du compilateur pour trouver la source du problème ;
  2. 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