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

Visual C++ Discussion :

cannot instantiate abstact class


Sujet :

Visual C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 91
    Par défaut cannot instantiate abstact class
    Bonjour,

    La notion d'héritage et d'utilisation de virtual me pose qques soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CCds.cpp
    c:\ccds.h(31) : error C2259: 'CDayCounter' : cannot instantiate abstract class due to following members:
      c:\headers\cdaycounter.h(13) : see declaration of 'CDayCounter'
    CDayCounter' : cannot instantiate abstract class due to following members:
    headers\cdaycounter.h(13) : see declaration of 'CDayCounter'
    CdayCOunter est un membre de CCC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class CCC 
    {
    public:
    	CCCC();
    	virtual ~CCCCC();
    private:
    	CDayCounter m_daycounter;			//schedule 
     
    };
    et ma classe CDayCOunter est une classe mere
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class CDayCounter  
    {
    public:
    	 CDayCounter();
    	 CDayCounter(string s);
    	virtual ~CDayCounter();
    	// according to a calculation convention
    	virtual double yearFraction(CDate &d1, CDate &d2) = 0;
    	string m_dayCountType;
    };
    JE vous remercie d'avance pour votre aide

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Ben, comme indiqué, CDayCounter possède une fonction virtuelle pure, c'est une classe abstraite.

    Tu ne peux donc pas avoir d'objet de type CDayCounter dans ta classe CCC.
    Par contre, tu peux y mettre un pointeur vers CDayCounter (CDayCounter *) ou une référence vers CDayCounter (CDayCounter &)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 91
    Par défaut
    et un pointeur ou une reference oui?
    si oui
    pour quelle raison?

    et la je crois que ca se clarifiera

    merci

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Parce qu'une référence/pointeur de type référence/pointeur vers (une classe mère) peut tout-à-fait pointer en réalité sur un objet d'une classe fille, non-abstraite, elle.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 91
    Par défaut
    ok ca me va

    merci

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Par défaut
    Bonjour,

    Je pense avoir un problème similaire, j'espère avoir trouvé le bon endroit pour poster sinon je m'en excuse.

    Voilà j'ai créer une classe mère Action qui possède une méthode virtuel comme suit:
    virtual string getname() = 0
    Cette méthode est par la suite intancier dans les sous classes ActionTouch, ActionZoom etc... qui hérite de la classe Action.

    Dans mon programme principal je voudrais créer un vecteur d'Action. Cepandant lors de la création il me dit que c'est impossible car il ne peut instancier une classe abstraite j'ai bien compris grâce à vos postes que c'était à cause de cette fonction virtuel getname(), mais je ne sais pas comment faire.

    Le but c'est de faire un vecteur d'Action dans lequel il y aurait plusieurs objets dérivant de la classe action..
    Je suis désolé si ma question est toute bête je suis débutante et je ne savais pas trop où poster. J'espere avoir été assez claire.
    Merci d'avance pour vos réponses.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Par défaut
    Merci a moi même

    j'ai trouvé la réponse je la met au cas ou

    il faut déclarer le vecteur ainsi

    vector <Action*> nomVecteur

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/03/2013, 11h58
  2. Fatal error: Cannot instantiate non-existent class: gladexml
    Par Streetounet dans le forum GTK+ avec PHP
    Réponses: 4
    Dernier message: 07/01/2009, 14h46
  3. Réponses: 3
    Dernier message: 15/01/2008, 11h30
  4. [debug] "cannot find symbol" classe interne
    Par NailMaker dans le forum Langage
    Réponses: 2
    Dernier message: 15/06/2006, 20h00
  5. [Plugin] Comment instantier certaines classes de ANT ?
    Par relivio dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 01/04/2004, 15h45

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