OVH Cloud OVH Cloud

pointeur sur une classe ?

3 réponses
Avatar
Pierrick
Question de débutant.. mes excuses si j'me suis trompé de groupe de
discussion.
J'ai un pointeur monObjet sur une structure obj. Cette structure contient un
objet vector de la stl. Quand je tente de faire mon push_back le programme
plante. Je n'en comprend pas la raison et ne trouve pas d'alternative..

merci
Pierrick


#include <vector>

typedef struct {
float x,y,z;
} v3d;

typedef struct {
vector<v3d> points;
...
} obj;


void lireObjet (char *monFichier, obj *monObjet)
{
v3d vecteur;
...
// Plante à la ligne suivante :
monObjet->points.push_back(vecteur);
...
}

3 réponses

Avatar
Fabien LE LEZ
On Wed, 14 Jan 2004 01:02:57 +0100, "Pierrick"
wrote:

typedef struct {
float x,y,z;
} v3d;


Ça c'est du bricolage à la C. En C++ on écrit plutôt :

struct v3d
{
float x, y, z;
};

typedef struct {
vector<v3d> points;


idem

void lireObjet (char *monFichier, obj *monObjet)


Tu as une raison de faire un passage par pointeur et pas par
référence ?

{
v3d vecteur;
...
// Plante à la ligne suivante :
monObjet->points.push_back(vecteur);


A priori, le pointeur "monObjet" n'est pas valide. Le problème vient
du code appelant.

--
;-)

http://www.gotw.ca/gotw/063.htm
http://www.gotw.ca/gotw/067.htm#2

Avatar
Alexandre
void lireObjet (char *monFichier, obj *monObjet)
{
v3d vecteur;
...
// Plante à la ligne suivante :
monObjet->points.push_back(vecteur);
...
}


Postes l'appel de cette fonction. Je dirais que tu envoies un pointeur non
valide (par ex. pas alloué) etc...
Et puis, un conseil, évites d'utiliser char * pour des chaines, mais
std::string
Pour passer un obj une référence est mieux qu'un pointeur.
Tu as appris le C, ça se voit ;-)

Avatar
Pierrick
"Tu as appris le C, ça se voit"
oui plein d'habitudes à perdre vite fait ^__^
Bien vu mon pointeur ne pointait nulle part, vous êtes des chefs !

Merci

Pierrick

Postes l'appel de cette fonction. Je dirais que tu envoies un pointeur non
valide (par ex. pas alloué) etc...
Et puis, un conseil, évites d'utiliser char * pour des chaines, mais
std::string
Pour passer un obj une référence est mieux qu'un pointeur.
Tu as appris le C, ça se voit ;-)