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:
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:
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:
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