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 :

heritage multiple virtuel et warning 4250


Sujet :

C++

  1. #1
    Membre actif Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Points : 207
    Points
    207
    Par défaut heritage multiple virtuel et warning 4250
    Bonjour, oui encore un post sur l'héritage multiple mais je n'ai pas trouvé de réponses
    Voilà le code testé :
    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
    #include <iostream>
    #include <string>
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
     
    class Controller
    {
    public:
     
    	virtual ~Controller() {};
    	virtual bool isTimeBased() const = 0;
    	virtual void update(float dt) const = 0;
    };
     
     
    class TimeBasedController : virtual public Controller
    {
    public:
     
    	virtual ~TimeBasedController() {};
    	bool isTimeBased() const { return true; }
    };
     
    class RealTimeInputController : virtual public Controller
    {
    public:
     
    	virtual ~RealTimeInputController() {}
    	bool isTimeBased() const { return false; }
    };
     
     
    class PathController : virtual public Controller
    {
    public:
     
    	virtual ~PathController() {};
    	void update(float dt) const { getPath(dt); }
    	virtual void getPath(float dt) const = 0;
    };
     
     
    class MyPathController : public PathController, public TimeBasedController
    {
    public:
     
    	void getPath(float dt) const { std::cout<< "getting path 1" << std::endl; }
    };
     
    class MyPathController2 : public PathController, public RealTimeInputController
    {
    public:
     
    	void getPath(float dt) const { std::cout<< "getting path 2" << std::endl; }
    };
     
     
    int main()
    {
       MyPathController p1;
       MyPathController2 p2;
       std::string s1,s2;
       p1.isTimeBased() ? s1 = "p1 is time based" : s1 = "p1 is not time based";
       p2.isTimeBased() ? s2 = "p2 is time based" : s2 = "p2 is not time based";
     
       std::cout << s1 << std::endl;
       std::cout << s2 << std::endl;
       p1.update(0);
       p2.update(0);
     
       system("pause");
     
       return 0;
    }
    Et maintenant à la compilation avec visual express 2008 en /W3 j'obtiens ces warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    warning C4250: 'MyPathController'*: hérite de 'TimeBasedController::TimeBasedController::isTimeBased' via la dominance [...]*: voir la déclaration de 'TimeBasedController::isTimeBased'
    warning C4250: 'MyPathController'*: hérite de 'PathController::PathController::update' via la dominance [...]*: voir la déclaration de 'PathController::update'
    warning C4250: 'MyPathController2'*: hérite de 'RealTimeInputController::RealTimeInputController::isTimeBased' via la dominance [...]*: voir la déclaration de 'RealTimeInputController::isTimeBased'
    warning C4250: 'MyPathController2'*: hérite de 'PathController::PathController::update' via la dominance [...]*: voir la déclaration de 'PathController::update'
    Mais la sortie obtenue est bien celle que j'attend:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    p1 is time based
    p2 is not time based
    getting path 1
    getting path 2
    Appuyez sur une touche pour continuer...
    J'ai vu également ce lien concernant le warning, mais je ne suis quand même pas sûr que ce bout de code soit bien formé niveau c++...
    Merci d'avance, bonne journée
    - hp pavillon dv7
    - intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz 2.27GHz
    - nVidia GeForce 9600M GT
    - mémoire vive : 3.0Go

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Le code est bien forme. Visual C++ semble donner ce warning meme quand il n'y a pas d'ambiguite sur ce qui peut etre desire par le programmeur (le cas vers lequel tu pointes est encore plus clair). Reflexion faite, je me demande s'il y a des cas ou ce warning est utile, il me semble qu'il faut une erreur des qu'il y a ambiguite.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Le code est bien forme. Visual C++ semble donner ce warning meme quand il n'y a pas d'ambiguite sur ce qui peut etre desire par le programmeur (le cas vers lequel tu pointes est encore plus clair). Reflexion faite, je me demande s'il y a des cas ou ce warning est utile, il me semble qu'il faut une erreur des qu'il y a ambiguite.
    Tu as bien une erreur (C2250) en cas d'ambigüité.
    Je pense que le warning est là pour te dire que t'es en train de faire un truc louche ... et m'est d'avis que ce doit souvent être le cas.

    Citation Envoyé par babar63 Voir le message
    Bonjour, oui encore un post sur l'héritage multiple mais je n'ai pas trouvé de réponses
    Je ne sais pas si ce sont tes définitions complètes, mais n'aurais-tu pas intérêt à passer par des classes traits - et éviter ainsi ton héritage en losange. Ton héritage m'a l'air d'être plutôt 'descriptif'.

  4. #4
    Membre actif Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par 3DArchi
    Je ne sais pas si ce sont tes définitions complètes, mais n'aurais-tu pas intérêt à passer par des classes traits - et éviter ainsi ton héritage en losange. Ton héritage m'a l'air d'être plutôt 'descriptif'.
    C'était plus une ébauche de conception, les classes ne sont pas encore exhaustives... il me faudra sans doute des fonctions associées pour les classes "TimeBased" (ou non) et probablement pouvoir les caster (En revanche ma fonction "IsTimeBased", elle n'a pas lieu d'être...)

    En tout cas merci pour vos réponses
    - hp pavillon dv7
    - intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz 2.27GHz
    - nVidia GeForce 9600M GT
    - mémoire vive : 3.0Go

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

Discussions similaires

  1. Héritage multiple virtuel
    Par Kant2006 dans le forum C++
    Réponses: 19
    Dernier message: 15/06/2006, 14h54
  2. heritage multiple
    Par r0d dans le forum C++
    Réponses: 6
    Dernier message: 21/04/2006, 09h40
  3. [POO] Héritage multiple Parent
    Par djshaker dans le forum Langage
    Réponses: 15
    Dernier message: 15/03/2006, 17h35
  4. Réponses: 9
    Dernier message: 25/05/2005, 18h17
  5. [Kylix] heritage multiple et interfaces :(
    Par le_barbu dans le forum EDI
    Réponses: 4
    Dernier message: 26/01/2004, 19h30

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