ElectricalMan
Messages postés39Date d'inscriptionsamedi 20 mars 2004StatutMembreDernière intervention 5 novembre 2008
-
11 août 2006 à 17:33
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 2006
-
11 août 2006 à 20:43
bjr tt le monde,
je m'aitrise pas encore C++ et j'ai un pb ! pouvez vous m'aider à gangner du temps ;
// je cré au départ un tableau de pointeur sur une classe "Panne" (da taille = nbrPanne)
Panne **P = new Panne*[nbrPanne];
for(int i=0; i<nbrPanne; i++) // pour chaque case
P[i] = new Panne(nbrTotEtats); // je cré les objets proprement dit
.......
typeP = ..........; // je le récupère mais pb : typeP peux être sup à "nbrPanne"
//je dois donc augmenter la taille du tableau pour pouvoir écrir : P[typeP-1] !
// donc moi avant avec le "C" j'utilisais realloc pour réallouer un tableau
// mais là avec new j'ai pas trouvé !!!
P[typeP-1]->EtatPanne[P[typeP-1]->index++] = id;
// juste pour info : là j'enregistre les états de panne dans le tableau
// "EtatPanne" de l'objet P[typeP-1]
// "index++" ; c pour connaitre après le nbre d'états de panne pour chaque objet P
.................
class Panne
{
public :
long nbrEtats;
long type, index;
long *EtatPanne;
Panne(long n); // Constructeur avec n : nbrEtats
~Panne(); // Déstructeur
};
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 11 août 2006 à 18:15
C'est trés simple, il suffit d'utiliser le template std::vector.
#include <vector>
std::vector P(nbrPanne, Panne(nbrTotEtats));
Ne fait jamais de tableau de pointeurs (ou collection de pointeurs en
générale) si ce n'est pas dans le but de tirer profit du polymorphisme.
Il manque aussi dans ta classe un constructeur par copie et un opérateur d'affecation que tu dois obligatoirement redéfinir si tu a besoin de redéfinir le desctructeur, ou au moins rendre ta classe non copiable.
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 11 août 2006 à 18:17
si tu dois reallouer de la memoire, il faut mieux que
tu utilise la stl (avec les classes comme Vector, deque, list et
autre), la réallocation de mémoire c'est pas l'ideal.
nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 200710 11 août 2006 à 20:26
push_back ajoute un élément à la fin du tableau, dans ton cas ce n'est pas à utiliser je pense.
Pour changer la taille du tableau, dirige toi vers la fonction "resize" de vector.
Et je pense que tu peut utiliser realloc dans ton programme C++ (#include <cstdlib>).
<hr size="2" width="100%" />Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
Vous n’avez pas trouvé la réponse que vous recherchez ?
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 11 août 2006 à 20:36
Surtout pas, il ne faut jamais utilliser les allocateurs du C en C++
sauf si on sait ce que l'on fait. Ca ne construit rien et ca ne détruit
rien. Pour un tableau de type non POD il faudrait quand meme faire des
placements new et des appels explicites de destructeur, ca n'a aucun
sens.