skone007
Messages postés166Date d'inscriptionmercredi 24 avril 2002StatutMembreDernière intervention23 juin 2009
-
31 oct. 2004 à 17:10
skone007
Messages postés166Date d'inscriptionmercredi 24 avril 2002StatutMembreDernière intervention23 juin 2009
-
1 nov. 2004 à 22:02
Voilà je suis toujours dans mon pseudo moteur 3D enfin bref je suis en train de coder un petite fonction pour calculer le barycentre enfin calculer le barycentre en lui soit même c'est pas trop compliquer mais moi je me prends toujours la tête alors je presentes mon problème :
Je sais bien que le C++ a inventé les using namespace mais pour moi c'est plus claire comme ca je vois tout de suite de quel classe il sagit puisque j'ai 2 classes CCar
J'ai une classe CCar dans l'espace de nommage VM::Mesh et une autre classe dans l'espace de nommage VM
la classe VM::Mesh::CCar :
CODE
class CCar : public CMesh, CRoue, CVitre
{
public :
CCar();
virtual ~CCar();
// Calculer le barycentre
CVector3f CalculateBaryC(void);
CVector3f CalculateBaryC(std::vector<CVector3f>&);
private :
CVector3f mTOri; // Orientation temporaire
CVector3f mBaryC; // Barycentre
std::vector<CVector3f> mBody; // Tableau de vertex du Body
std::vector<CRoue> mRoue; // Tableau de Roue
std::vector<CVitre> mVitre; // Tableau de Vitre
std::vector<CVector3f> mPhare; // Tableau de position de phare
std::vector<CVector3f> mStop; // Tableau de position de feu stop
std::vector<CVector3f> mArr; // Tableau de position de marche arrière
std::vector<CVector3f> mClign; // Tableau de position de Clignotant
protected :
};
Et la classe VM::CCar
CODE
class CCar : public VM::Mesh::CCar
{
public :
CCar();
virtual ~CCar();
private :
std::vector<VM::Mesh::CCar> mCar; // Tableau de voiture
protected :
};
Et là je suis en train d'essayé de coder les fonctions
VM::Mesh::CCar::CCalculateBaryC(std::vector<CVector3f>&);
et
VM::Mesh::CCar::CCalculateBaryC(void);
celle sans paramètre c'est pour calculer le barycentre du mBody du tableau VM::CCar::mCar indexé en 0 et affécté en mBaryC toujours du mCar[0].
et celle avec un paramètre c'est pour renvoyé un CVector3f du tableau en paramètre enfin bref.
Voilà ma fonction sans paramètre :
CODE
// Calculer le Barycentre
CVector3f VM::Mesh::CCar::CalculateBaryC(void)
{
// Declaration
CVector3f BC;
CVector3f temp;
VM::CCar car;
VM::Mesh::CCar mcar;
std::vector<VM::Mesh::CCar> tmcar;
std::vector<VM::CCar> tcar;
std::vector<CVector3f> tv;
// Initialisation
BC.Set(0.0f, 0.0f, 0.0f);
temp.Set(0.0f, 0.0f, 0.0f);
tmcar = car.GetCar();
mcar = tmcar[0];
tv = mcar.GetBody();
// Calculer
if((tmcar[0].GetBody()).empty()) // Si le tableau Body est vide
{
return CVector3f(0.0f, 0.0f, 0.0f);
tmcar[0].SetBarycentre(CVector3f(0.0f, 0.0f, 0.0f));
}
else // sinon
{
int i = tv.size();
for(int u = 0; u <= i; u++)
{
temp += tv[i];
}
BC = temp / i;
return BC;
tmcar[0].SetBarycentre(BC);
}
}
Et apparament j'ai une violation d'acces et on m'avais parlé d'iterator et j'ai pas trop bien compris et sur le net encore moi :S ... Enfin bref si quelqu'un aurai la gentiesse de me donné un peu de son temps pour me dire ce qui cloche sur mon code et pourquoi j'ai cette violation d'acces je suis aussi pres à entendre les critiques sur mes classes aussi ...
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 31 oct. 2004 à 18:35
return BC;
tmcar[0].SetBarycentre(BC);
tmcar[0].SetBarycentre(BC); ne sera jamais executée
pour tes indices utilise plutot vector<...>::size_type (comme on utiliserais size_t)
et BC.Set(0.0f, 0.0f, 0.0f); -> BC.Set(0, 0, 0); (en c++)
mias tu pourrais etre plus precis ? la a priori rien d'anormal, ca plante ou et comment ? avant de parler d'iterateur, tu voudrais faire quoi avec ton vector ?
skone007
Messages postés166Date d'inscriptionmercredi 24 avril 2002StatutMembreDernière intervention23 juin 2009 31 oct. 2004 à 21:28
Au passage :
mcar = tmcar[0];
ne pas marcher non plus violation d'acces
Mais le problème est plus vaste je m'embrouilles aves mes classes apparament...
Ces problèmes j'en est des tas comme ca qui sont en commentaire pour l'instant j'ai besoin d'un vrai coup de pouce enfin bref j'arrive pas à acceder au membre de mCar;
std::vector<VM::Mesh::CCar> mCar;
et dans VM::Mesh::CCar
y a d'autre tableau du type :
std::vector<CVector3f> mBody...
enfin ta vu ca je voudrais accedé a ces membres a partir de VM::CCar je voudrais pouvoir y acceder parce que je vais crée plusieurs voiture (VM::CCar) il sont pas tous le même body et tt ca enfin voilà je veux avoir :
mCar[0], mCar[1], ...
et a partir de ce tableau je voudrais accedé au membre de VM::Mesh::CCar... Je sais pas si je suis très claire :S
car.AddCar(v, r, vt, v, v, v, v);
car.AddCar(v, r, vt, v, v, v, v);
car.AddCar(v, r, vt, v, v, v, v);
// -------------------------------------
normalement avec ca mCar.size(); dois être 3 mais voilà des idées des methodes can you help me :( j'ai vraiment besoin d'aide ...
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 31 oct. 2004 à 21:52
ouai en fait c'est pas facile à voir (je me perds dans tout tes noms)
dans tes methodes Get*, tu retourne un vector par reference, mais il existe bien dans le contexte d'appel ?
en passant, ne redefinie jamais operator= si tu n'as pas besoin de redefinir le destructeur (ou construteur de copie), le compilo le fais tres bien et ca fais une source potentiel de bug en plus
skone007
Messages postés166Date d'inscriptionmercredi 24 avril 2002StatutMembreDernière intervention23 juin 2009 31 oct. 2004 à 21:58
Tu n'aurais pas MSN ca serait plus simple pour parler parce que là je suis desespérer ca fait quelque semaine que je suis sur ce prb d'acceder a ces membres et les Get quand je les utilises bien sur que ce qui doit être retourner existe ...
skone007
Messages postés166Date d'inscriptionmercredi 24 avril 2002StatutMembreDernière intervention23 juin 2009 1 nov. 2004 à 22:02
Merci pour ta reponses je vais recommencer tout le projet parce qu'apparament j'ai un problème de stucture et d'organisation des classes ...
Merci quand même ...