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

C++ Discussion :

[virtual] erreur de compilation


Sujet :

C++

  1. #1
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut [virtual] erreur de compilation
    Bonjour à tous, une toute petite erreur que je comprend pas...

    Voici la définition de ma classe mère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class CFP {
    
    public:
    	CFP(Choc & c, std::string nom_cfp); //Constructeur avec nom du composant
    	CFP(Choc &c);
    	virtual ~CFP();
    
    	// Méthodes virtuelles : implémentées dans les classes filles
            virtual void setImageReferenceIR();
    	virtual void setImageReferenceIR(int) = 0;
    	virtual void setImageReferenceIR(float) = 0;
    	virtual void setImageReferenceIR(cimg_library::CImg <unsigned short> );
    };
    Les fonctions membres virtuelles non pures sont évidemment implémentées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void CFP::setImageReferenceIR()
    {
    	image_IR_ref = camera.importImageIR(static_cast<int> (floor(camera.getNombreImages()*0.5)) );
    }

    Dans ma classe fille, j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class HR : public CFP
    {
    public:
    	HR(Choc & c, std::string nom_cfp);
    	virtual ~HR();
     
    	virtual void setImageReferenceIR(int);
    	virtual void setImageReferenceIR(float);
    };
    et dans un bout de code de cfp.cpp, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (image_IR_ref.is_empty() )
    	{
            setImageReferenceIR();
    	}

    Le compilo bloque sur la ligne en gras :
    HR.cpp(54) : error C2661: 'HR::setImageReferenceIR' : aucune fonction surchargée ne nécessite 0 arguments
    Pourtant, la fonction membre setImageReferenceIR() est définie dans la classe mère????

    Merci de votre soutien !!

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    En ne redéfinissant que certaines des fonctions virtuelles de même nom, tu perds la visibilité sur les autres quand tu manipules officiellement des instances de la classe fille ; il y a un masquage qui s'opère.
    Il faut que tu réimportes les autres fonctions dans la portée de la classe fille avec un using.

    Peut-être plus d'infos dans la FAQ.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    je crois comprendre ce que tu veux dire Luc...
    Il faut :
    * soit tout redéfinir
    * soit utiliser un using

    Par contre, je vois pas du tout comment utliser le "using". J'ai regardé dans la FAQ sans rien y trouver!

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class HR : public CFP
    {
    public :
     
            using CFP::setImageReferenceIR;
     
    	virtual void setImageReferenceIR(int);
    	virtual void setImageReferenceIR(float);
    };
    Par contre j'en profite pour poser une question : vu que le prototype n'est pas explicité, est-ce que ça importe toutes les surcharges de la fonction ? Si non, comment faire la distinction ?

    La FAQ :
    http://c.developpez.com/faq/cpp/?pag...CLASS_masquage

  5. #5
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    +1

    Merci Laurent.....
    Je connais pas encore la FAQ par coeur, mais j'y compte bien un jour!

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Cela devrait importer toutes les surcharges.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    oui ça marche nickel!!

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

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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