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


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Par défaut virtual
    question de newbie je pense.

    J'ai des classes LLGenotypeTreeLeaf, LLGenotypeTreeBinaryOperator, LLGenotypeTreeUnaryOperator, qui dérrivent de LLGenotypeTreeElement.
    Je veux implanter dans chacune de ces classes la fonction "evaluate" qui varrira selon la classe.
    Pour cela je déclare cette fonction en virtual dans LLGenotypeTreeElement et je la code dans les sous classes. Ca compilait jusqu'au jour où j'ai décidé de coder un constructeur dans une sous classe, et là il m'a mis :

    unresolved external symbol "public: virtual float __thiscall LLGenotypeTreeElement::Evaluate(int,int,int)

    Mon code est :
    TreeElement.h : (pas de cpp correspondant)
    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
    22
    23
     
    #ifndef LLGENOTYPETREEELEMENT_H
    #define LLGENOTYPETREEELEMENT_H
     
    #include <stdlib.h>
    #include <math.h>
    #include <iostream>
     
    using namespace std;
     
    class LLGenotypeTreeElement
    {
    private :
    	char _Type;
    	unsigned int _Level;
    	LLGenotypeTreeElement * _Parent;
     
    public :
    	virtual float Evaluate(int X, int Y, int Z);
    	char Type() {return _Type;};
    };
     
    #endif
    TreeBinaryOperator.h :

    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
    #ifndef LLGENOTYPETREEBINARYOPERATOR_H
    #define LLGENOTYPETREEBINARYOPERATOR_H
     
    #include "LLGenotypeTreeElement.h"
     
    class LLGenotypeTreeBinaryOperator : public LLGenotypeTreeElement
    {
    private :	
    	LLGenotypeTreeElement * _Son1;
    	LLGenotypeTreeElement * _Son2;
     
    public :
    	LLGenotypeTreeBinaryOperator();
    	float Evaluate(int X, int Y, int Z);
    };
     
    #endif
    TreeBinaryOperator.cpp :
    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
    22
    23
    24
    25
    26
    27
    28
    #include "LLGenotypeTreeBinaryOperator.h"
     
    LLGenotypeTreeBinaryOperator :: LLGenotypeTreeBinaryOperator()
    {
    	_Son1 = NULL;
    	_Son2 = NULL;
    }
     
    float LLGenotypeTreeBinaryOperator :: Evaluate(int X, int Y, int Z)
    {
    	switch(Type())
    	{
    	case '+' :
    		return _Son1->Evaluate(X,Y,Z) + _Son2->Evaluate(X,Y,Z);
    		break;
    	case '-' :
    		return _Son1->Evaluate(X,Y,Z) - _Son2->Evaluate(X,Y,Z);
    		break;
    	case '*' :
    		return _Son1->Evaluate(X,Y,Z) * _Son2->Evaluate(X,Y,Z);
    		break;
    	case '/' :
    		return _Son1->Evaluate(X,Y,Z) / _Son2->Evaluate(X,Y,Z);
    		break;
    	default :
    		return 0.;
    	}
    }
    Je veux bien un coup de pouce pour savoir ce qui ne va pas et ce que je n'ai pas compris.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Par défaut
    Si ta fonction est virtuelle pure (que tu ne veux pas la renseigner dans LLGenotypeTreeElement ), ta declaration doit être faite ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    virtual float Evaluate(int X, int Y, int Z) = 0;

  3. #3
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Par défaut
    ok c'est ça. merci.

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

Discussions similaires

  1. virtuals hosts apache
    Par kaiser2003 dans le forum Apache
    Réponses: 5
    Dernier message: 01/08/2004, 17h18
  2. [tomcat]comment cree un "Virtual Host" avec tomcat
    Par nouaman dans le forum Tomcat et TomEE
    Réponses: 17
    Dernier message: 04/06/2004, 22h51
  3. Déclenchement Programme sur Virtual Key
    Par Tom-G dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 09/05/2003, 12h58
  4. Virtual-key code
    Par lyrau dans le forum Windows
    Réponses: 2
    Dernier message: 29/03/2003, 19h22
  5. Abstract VS virtual
    Par LE CHAKAL dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2002, 17h50

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