IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Class abtraite et générique


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 61
    Points : 32
    Points
    32
    Par défaut Class abtraite et générique
    Salut a tous,
    J'ai un souci avec mon code, le voici (condensé!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    template<class T> class QCvImage{
     
    public:
    //Constructeur & destructeur
    	QCvImage(void){m_img = NULL;}
    	QCvImage(int hauteur, int largeur);
    	QCvImage(string &name);
    	QCvImage(IplImage* img) {m_img = cvCloneImage(img);}
    	QCvImage(QCvImage<T>& img);
    	~QCvImage();
     
    	QCvImage<T> operator= (QCvImage<T>& img){
                this->m_img = cvCloneImage(img.getIplImage());
                return *this;
            }//Partie qui me pose problème
     
    protected:
    	IplImage* m_img;
     
    };
    Ainsi donc j'ai droit à une erreur du compilateur:
    'QCvImage<T>'*: impossible d'instancier une classe abstraite
    Je ne comprends pas trop l'origine du problème, j'ai bien des méthodes virtuel pur, donc ma classe est bine abstraite. Mais pourquoi au sein de celle-ci j'ai cette erreur?
    Et donc comment la corriger?

    Merci d'avance.

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Comment ça au sein de celle ci? L'erreur est provoqué par quelle ligne?

    au cas où : si t'essayes d'instancier la classe forcément le compilo va se plaindre.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Comme Goten, je ne vois pas trop ton problème. Il doit manquer des informations.
    La seule chose qui m'interpelle est le type de retour de l'opérateur = : QCvImage<T> là où j'aurais attendu une référence. C'est le seul endroit où tu instancies ta classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QCvImage<T>& operator= (QCvImage<T>& img){

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 61
    Points : 32
    Points
    32
    Par défaut
    C'est bien cette ligne qui me posait problème. La correction en mettant le type de retour par référence a corriger le problème.

    Pour ajouter quelques précision:
    Dans cette classe (class QCvImage) il y a des méthodes virtuelles pures, donc elle est abstraite.
    Pourquoi l'ajout d'une référence a-t-elle corrigé le problème?
    (S'il vous plus des infos je les rajouterai)

  5. #5
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Simplement parce que sinon tu retournais par valeur. Qui dit retour par valeur dit copie, qui dit copie, dit construction. kaboum =)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 61
    Points : 32
    Points
    32
    Par défaut
    okay...

    Je comprends, je comprends...
    En faite s'il y a construction, il vas devoir compiler les différentes versions des type de variable utilisé dans le programme. Et donc instancier autant de fois QCvImage, qu'il a de type. Or c'est une classe abstraite ==> plantage a la compilation.
    J'ai bon?

    En tous cas vous remercie tous les deux pour votre aide!

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Comme le dit Goten et comme je l'ai dit précédemment, le retour par valeur QCvImage<T> était le seul endroit où tu instanciais ta classe.
    Une remarque : souvent l'héritage se marie mal avec l'opérateur '='. Cf F.A.Q. : Quand est ce qu'une classe a une sémantique de d'entité ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/01/2015, 00h51
  2. utilisation d'une classe de connexion générique
    Par twister9458 dans le forum Langage
    Réponses: 12
    Dernier message: 20/07/2009, 11h07
  3. Réponses: 2
    Dernier message: 06/03/2009, 09h52
  4. Réponses: 18
    Dernier message: 25/11/2007, 13h35
  5. classe date générique ?
    Par lili_bzh dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 07/09/2004, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo