Bonjour, oui encore un post sur l'héritage multiple mais je n'ai pas trouvé de réponses
Voilà le code testé :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
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; }Mais la sortie obtenue est bien celle que j'attend:
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'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++...
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...
Merci d'avance, bonne journée
Partager