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 :

Probleme d'heritage


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut Probleme d'heritage
    Salut à tous

    Bon je pense que le code vaut mieux qu'un gros discours donc le voici:

    AbstractShip.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
    18
    19
    20
    21
    22
    23
    24
     
    #ifndef __FIGHTER_ 
    #define __FIGHTER_ 1 
    #include "Strike.h" 
     
    class AbstractShip 
    { 
    private: 
       int HitPoints; 
       void* strikeFactory; 
     
    protected: 
       AbstractShip(); 
       ~AbstractShip(); 
       Strike *nextHit(); 
     
    public: 
       void setHitPoints(int); 
       int getHitPoints(); 
       virtual Strike fight() = 0; 
       virtual bool dodge(Strike) = 0;
    }; 
     
    #endif
    FactoryForShip.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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    #ifndef __FACTORYFORSHIP_
    #define __FACTORYFORSHIP_ 1
     
    #include<iostream>
    #include <string>
    #include "AbstractShip.h"
    #include "fct_strike.h"
     
    using namespace std;
     
    class FactoryForShip:public AbstractShip
    {
    private:
        string    Name;
        string    Command;
        int        nbAllowedAttacks;
        int        *AllowedAttacks;
        int        *MBonus;
        int        nbDefaultAttacks;
        int        *DefaultAttacks;
        int        Shield;
        int        Handling;
        int        StrikeCost;
        bool    Hidden;
        bool    LastDefence;
    protected:
        bool IsAllowed(Strike);
    public:
        FactoryForShip();
        FactoryForShip(string _Name, string _Command, int _nbAllowedAttacks, int* _AllowedAttacks, int* _MBonus, int _nbDefaultAttacks,int *_DefaultAttacks,
            int _LifePoints, int _Shield, int _Handling, int _StrikeCost, bool _Hidden);
        ~FactoryForShip();
     
        string getName();
        void setName(string);
     
        string getCommand();
        void setCommand(string);
     
        int getnbAllowedAttacks();
        void setnbAllowedAttacks(int);
     
        int* getMBonus();
        void setMBonus(int* _MBonus);
     
        int* getAllowedAttacks();
        void setAllowedAttacks(int*);
     
        int getnbDefaultAttacks();
        void setnbDefaultAttacks(int);
     
        int* getDefaultAttacks();
        void setDefaultAttacks(int*);
     
        int getShield();
        void setShield(int);
     
        int getHandling();
        void setHandling(int);
     
        int getStrikeCost();
        void setStrikeCost(int);
     
        bool getHidden();
        void setHidden(bool);
     
        bool getLastDefence();
        void setLastDefence(bool);
     
        virtual Strike GetDefauldStrike() = 0;
        Strike fight();
        bool dodge(Strike&);
    };
     
    #endif
    Tief.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
    18
    19
    20
    21
    22
    23
    24
     
    #ifndef _TIEF_H
    #define _TIEF_H 1
     
    #include <iostream>
    #include <string>
    #include "FactoryForShip.h"
     
    using namespace std;
     
    class TieF:public FactoryForShip
    {
        private:
            int        LastDefault;
        public:
            TieF();
            ~TieF();
            int        getLastDefault();
            void    setLastDefault(int);
     
            Strike    GetDefauldStrike();
    };
     
    #endif
    et quand je fait
    le compilateur me retourne:

    error C2259: 'TieF' : cannot instantiate abstract class due to following members:
    g:\codecpp\tp5\tief.h(11) : see declaration of 'TieF'

    Il y a un post similaire sur le forum ou la personne avait oublié de declarer une methode virtuelle mais moi j'ai verifié et j'ai pas l'impression que ca soit le cas.

    Vous voyez ce qui lui plait pas? J'en ai marre qu'il m'injurie comme ca lol
    Merci

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Salut !

    A vue de pif je dirais que ça vient de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       virtual bool dodge(Strike) = 0;
    [...]
        bool dodge(Strike&);
    un coup tu demande un Strike (passage par copie) un coup un Strike& (passage par référence) ce qui fait que la surdéfinition ne peut avoir lieu
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Quand une classe à des fonctions virtuel,
    on met son destructeur à virtuel.

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par Lucien63
    Quand une classe à des fonctions virtuel,
    on met son destructeur à virtuel.
    Je dirais plutôt des fonctions abstraites et c'est vrai que ça devrait être le cas, mais dans ce cas, je ne sais pas si ça posera de problème, puisque les classes fille ne manipules pas de pointeurs... Cependant, il est vrai que dans le cas de l'utilisation du polymorphisme, il vaudrait mieux que tu déclares tes destructeurs comme étant virtuels
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut
    Ho lol j'ai honte je vais me cacher . Je suis desolé de vous avoir derangé. Merci à vous 3 davoir été aussi rapide.

  6. #6
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Pas de problème ^^

    Pense au résolu
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

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

Discussions similaires

  1. probleme d'heritage tform1
    Par nosfer dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/05/2006, 13h33
  2. probleme d'heritage sur des chaines de caracteres
    Par pikiwiki dans le forum C++
    Réponses: 3
    Dernier message: 24/05/2006, 21h01
  3. [debutant] Probleme d heritage
    Par Treuze dans le forum Débuter
    Réponses: 20
    Dernier message: 21/04/2006, 12h46
  4. probleme d heritage.
    Par ceres02 dans le forum Langage
    Réponses: 11
    Dernier message: 30/03/2006, 14h54
  5. Probleme d'heritage curieux
    Par viddak dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/05/2005, 14h58

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