Problème fonction virtuelles
Bonjour j'ai un petit problème avec mes fonctions virtuelles. J'ai donc 4 fichiers.
Joint.h
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
|
#ifndef DEF_JOINT
#define DEF_JOINT
#include <string>
#include <ode/ode.h>
class Joint
{
public:
// Constructeur
Joint();
// Méthodes
/* Renvoie le JointID */
dJointID getJointID();
/* Renvoie le nom du Joint */
std::string getName();
/* Renvoie les BodyID attaché aux joint (0 = premier bodyID, 1 = deuxième bodyID) */
dBodyID getBodyID(int body);
// Méthodes virtuelles
/* Permet de rentrer la velocité du moteur */
virtual void setVelocity(double velocity);
/* Permet de rentrer la force du moteur */
virtual void setMaxForce(double force);
protected:
// Attributs
/* Joint */
dJointID m_joint;
/* Le nom du Joint */
std::string m_name;
};
#endif |
Joint.cpp
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
|
#include "Joint.h"
// Constructeur
Joint::Joint()
{
m_joint = NULL;
}
// Méthodes
/* Renvoie le JointID */
dJointID Joint::getJointID()
{
return m_joint;
}
/* Renvoie le nom du Joint */
std::string Joint::getName()
{
return m_name;
}
/* Renvoie les BodyID attaché aux joint (0 = premier bodyID, 1 = deuxième bodyID) */
dBodyID Joint::getBodyID(int body)
{
dBodyID tempBodyID = dJointGetBody(m_joint, body);
return tempBodyID;
}
// Méthodes virtuelles
/* Permet de rentrer la velocité du moteur */
void setVelocity(double velocity)
{ }
/* Permet de rentrer la force du moteur */
void setMaxForce(double force)
{ } |
MoteurSimple.h
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
|
#ifndef DEF_MOTEURSIMPLE
#define DEF_MOTEURSIMPLE
#include <string>
#include <ode/ode.h>
#include "Joint.h"
class MoteurSimple : public Joint
{
public:
// Constructeur
MoteurSimple(dWorldID world, std::string name, dBodyID body1, dBodyID body2,
double axe_pos_x, double axe_pos_y, double axe_pos_z,
double axe_rot_x, double axe_rot_y, double axe_rot_z);
// Destructeur
~MoteurSimple();
// Méthodes virtuelles
/* Permet de rentrer la velocité du moteur */
virtual void setVelocity(double velocity);
/* Permet de rentrer la force du moteur */
virtual void setMaxForce(double force);
private:
// Attributs
};
#endif |
MoteurSimple.cpp
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
|
#include "MoteurSimple.h"
// Constructeur
MoteurSimple::MoteurSimple(dWorldID world, std::string name, dBodyID body1, dBodyID body2, double axe_pos_x, double axe_pos_y, double axe_pos_z, double axe_rot_x, double axe_rot_y, double axe_rot_z)
{
m_name = name;
m_joint = dJointCreateHinge(world, 0);
dJointAttach (m_joint, body1, body2);
dJointSetHingeAnchor (m_joint, axe_pos_x, axe_pos_y, axe_pos_z);
dJointSetHingeAxis (m_joint, axe_rot_x, axe_rot_y, axe_rot_z);
}
// Méthodes virtuelles
/* Permet de rentrer la velocité du moteur */
void MoteurSimple::setVelocity(double velocity)
{
dJointSetHingeParam (m_joint, dParamVel, velocity);
}
/* Permet de rentrer la force du moteur */
void MoteurSimple::setMaxForce(double force)
{
dJointSetHingeParam (m_joint, dParamFMax, force); |
Le code compile correctement mais j'ai un problème lors de l'édition du lien:
j'ai ces erreurs:
Joint.obj : error LNK2001: symbole externe non résolu "public: virtual void __thiscall Joint::setMaxForce(double)" (?setMaxForce@Joint@@UAEXN@Z)
Joint.obj : error LNK2001: symbole externe non résolu "public: virtual void __thiscall Joint::setVelocity(double)" (?setVelocity@Joint@@UAEXN@Z)
Je crois comprendre que cela vien de mes fonctions virtuelles mais je ne comprend pas pourquoi. Peut etre une erreur de programmation. Si quelqu'un peu m'aider à retrouver ce problème. (j'ai déjà eu ce problème et résolu d'uneautre manière sans passer par les fonctions virtuelles, mais la je suis obligé)