Pourquoi ca marche pas :'(

Signaler
Messages postés
172
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2009
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
salut j ai un probleme avec une fonction pour initialiser des particules,pouvez vous me dire pourquoi il ne marche pas et comment le faire marcher

#include "structure.cpp"

class particule{
public:
float x0;
float y0;
vector direction;
float x;
float y;
short time;
};

int particulegenerator(int X,int Y,particule *P[])
{
for(int i=0;i<sizeof(P)/sizeof(particule*);i++)
{
if(P[i]==NULL){          //la j ai un probleme le compil m affiche une erreur
P[i]=new particule();

}
//P[1]->x=100;
}
return 0;
}


cette fonction sert a initialiser les particules dans un tableau puis a remplacer les particules qui sont "mortes" donc qui sont supprimee par de nouvelles particules...(on teste si le pointeur est ok ou point)

5 réponses

Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
21
particule est une classe. Par conséquent, il doit lui être associé un constructeur et un destructeur.

La commande "new" fait appel au constructeur de la classe qui se trouve juste derrière. Pour toi, new fait appel à "rien" et donc plantera lamentablement ...

//Fichier particule.h

class particule{
public:
float x0;
float y0;
vector direction;
float x;
float y;
short time;
particule();
particule(float x,float y);
virtual ~particule();
};



//Fichier particule.cpp

particule::particule()
{
 //initialise la particule avec des valeurs nulles partout
x0 =0;
y0=0;
[...]
}

particule::particule(float x, float y)
{
 //initialise la particule avec quelques valeurs
x0 =x;
y0=y;
[...]
}

virtual particule::~particule()
{
 // détruit les pointeurs présents dans ta classe

}



// Ton programme appelant
#include "particule.h"

int main(void)
{
 particule * p;
 particule * p1;
 p = new particule(); // particule vide
 p1 = new particule(300,200); // particule avec initialisation
 return 0;
}


Manu
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
il y a un pb au niveau de la fct de génération, il faut que tu ajoute un paramètre : le nombre d'élément du tableau, car tu ne peut pas faire siszeof(P)/sizeof(P[0]) pour l'obtenir, cela ne marche qu'avec des tableaux statiques.
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
econs -> chaque classe a un constructeur par défaut sans paramètres même si tu n'en met pas un explicitement, on peut donc faire new CParticule().
Par contre dè que l'on met un constructeur avec paramètres, le constructeur par défaut sans paramètre doit être mis explicitemenent.
Messages postés
172
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2009

ok merci j ai resolu le probleme,maintenant mon code marche parfaitement et sans constructeur explixcite ;)

comment on fait pour voir le nombre d element pour un tableau dyna?
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
on peut pas, c'est à toi de savoir ce que tu alloue ou passe en paramètre à une fonction