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 :

Problème de constructeur


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut Problème de constructeur
    Bonsoir,

    Je suis en train de faire un projet en C++ et je rencontre quelques soucis dans mes constructeurs de classe.

    J'ai une classe Option de laquelle je fais hériter une classe Option barrière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Option:public Loi_Proba{
    protected:
    	double T;
    	PayOff &P;
    	Processus &S; // modèle de la dynamique du sous-jacent 
    	RisklessAsset &RA;// modèle pour le taux d'intérêt 
    public:
    	Option(RisklessAsset &RAi, PayOff &Pi, Processus &Si, double Ti=1.);
    	Option();
    };
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class OptionBarriere:public Option{
    	double bg,bd; // le domaine est un intervalle de la forme (bg,bd)
    public:
    	OptionBarriere(RisklessAsset &RAi, PayOff &Pi, Processus &Si,double bgi=0, double bdi=60, double Ti=1.);
    	double Simule() const;
    };
    Je définis mes constructeurs en utilisant une liste d'initialisation mais VS me renvoie l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     error C2614: 'OptionBarriere'*: initialisation de membre non conforme*: 'S' n'est ni une base ni un membre
    error C2614: 'OptionBarriere'*: initialisation de membre non conforme*: 'RA' n'est ni une base ni un membre
    error C2614: 'OptionBarriere'*: initialisation de membre non conforme*: 'P' n'est ni une base ni un membre
    Est-ce que quelqu'un aurait une idée d'où peut provenir le problème ?

    Par ailleurs, juste avant que je touche un peu mon code, ça compilait mais j'avais des problèmes d'allocation de mémoire quand je lançais certaines méthodes qui n'utilisaient que des sous-méthodes qui fonctionnent parfaitement individuellement. C'est peut-être lié à une mauvaise construction de mes objets...

    Merci d'avance de votre aide.

    Cédric.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    On peut voir le code des constructeurs s'il te plait
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Interdiction d'utiliser les listes d'initialisation pour les membres hérités.
    Il faut soit donner une valeur dans le corps du constructeur soit passer par le constructeur de la classe parente quand on peut pas utiliser le corps du constructeur (typiquement les références)
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Voici le code des constructeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Option::Option(RisklessAsset &RAi,PayOff &Pi, Processus &Si,double Ti):RA(RAi),P(Pi),S(Si){T=Ti;};
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    OptionBarriere::OptionBarriere(RisklessAsset &RAi, PayOff &Pi, Processus &Si,double bgi, double bdi, double Ti):P(Pi),RA(RAi),S(Si)
    {
    	bg=bgi;bd=bdi;T=Ti;
    };

  5. #5
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Davidbrcz a raison, il faut passer par le constructeur de la classe parente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    OptionBarriere::OptionBarriere(RisklessAsset &RAi, PayOff &Pi, Processus &Si,double bgi, double bdi, double Ti):
    Option(Pi, RAi, Si),
    bg(bi),
    bd(bdi),
    T(Ti)
    {
    }

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Merci de votre aide.

    Je rencontre encore un petit problème lié aux classes : ma classe option dérive de la classe abstraite Loi_Proba suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Loi_Proba{
    public:
        virtual double Simule() const =0;
        double * MonteCarlo(long NMC);
    };
    Ma méthode MC n'utilise la méthode Simule() c'est pour ça que je ne la déclare pas virtuelle. Dans mes classes filles, je redéfinis juste la bonne méthode Simule(). Ma classe Option va donc hériter de cette méthode mais je ne peux pas spécifier ma méthode Simule() à ce niveau car la classe Option est encore trop générique.

    Avec les modifications que vous m'avez indiquées, je n'ai plus les erreurs mais une nouvelle apparaît :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    error C2259: 'Option'*: impossible d'instancier une classe abstraite
            à cause des membres suivants*:
            'double Loi_Proba::Simule(void) const'*: est abstrait
    J'ai donc rajouté la méthode Simule() dans Option en mettant un return 0 car je me suis dit que de toute façon, dans l'exécution on ira dans les bonnes classes... J'obtiens alors l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error LNK2019: symbole externe non résolu "public: __thiscall Option::Option(void)" (??0Option@@QAE@XZ) référencé dans la fonction "public: __thiscall OptionBarriere::OptionBarriere(class RisklessAsset &,class PayOff &,class Processus &,double,double,double)" (??0OptionBarriere@@QAE@AAVRisklessAsset@@AAVPayOff@@AAVProcessus@@NNN@Z)
    Voila voila, je suis désolé pour ce message aussi long mais je ne pensais pas que mon problème était si important.

    Merci encore de votre aide.

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Bon en fait ça marche....

    Merci.

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

Discussions similaires

  1. problème de constructeur avec wxWidget
    Par Ardeciel dans le forum wxWidgets
    Réponses: 2
    Dernier message: 10/03/2007, 23h11
  2. Problème définition constructeur
    Par bugland dans le forum Langage
    Réponses: 11
    Dernier message: 12/02/2007, 14h34
  3. Problème de constructeur de copie ?
    Par Bestiol dans le forum C++
    Réponses: 6
    Dernier message: 03/11/2006, 11h28
  4. [POO]Probléme de constructeur virtuel surchargé
    Par Laurent Dardenne dans le forum Delphi
    Réponses: 10
    Dernier message: 15/08/2006, 12h19
  5. [C#] DLL, problème de constructeur
    Par gmonta dans le forum C#
    Réponses: 4
    Dernier message: 30/11/2005, 09h43

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