[C++] Utilisation des pointeurs pour tableau

Utilisation des pointeurs pour tableau [C++] - Programmation

Marsh Posté le 15-02-2002 à 17:19:08    

Salut !
 
J'ai besoin d'un petit coup de main.
je dois me créer un tableau d'éléments qui ne sont pas définis au depart puisque passés en paramètre de mon constructeur.
les paramètres passés sont X et Y definissant le nombre d'élements à afficher sur une grille en X et Y (pour faire un damier de dalles)
je dois donc créé un tableau de X*Y éléments et donc ils ne peuvent donc être créé statiquement. pour ensuite appelé mon constructeur de dalles
 
Merci de votre aide.

Reply

Marsh Posté le 15-02-2002 à 17:19:08   

Reply

Marsh Posté le 15-02-2002 à 19:33:09    

Tu peux créer un tableau de tableaux : Element**, c'est à dire un tableau de X pointeurs, eux même pointant sur des tableaux de Y éléments.
Le plus simple serait peut être de créer un tableau de X*Y élements. Tu accèdes à un élément (x, y) par Elements[Y*y + x]

Reply

Marsh Posté le 15-02-2002 à 19:41:13    

Je viens de tenter ceci :
-------
int *totaldalle = new int;
*totaldalle=(nbdalleX*nbdalleY);
int tdalle[*totaldalle]; // Creation d'un tableau de dalle
 for(int y=0;y<nbdalleY;y++)
 {
  for(int x=0;x<nbdalleX;x++)
  {
  // Appel de dalle : Envoie la position de la dalle dans l'espace et sa couleur
  cout << "Construction de la dalle : " << x <<","<<y << endl;
//  dalle tdalle[numdalle](0,0,0);
  }
 }
---------
Mais ,j'obtiens pour le int tdalle[*totaldalle] :  
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'tdalle' : unknown size
 

bjbebert a écrit a écrit :

Tu peux créer un tableau de tableaux : Element**, c'est à dire un tableau de X pointeurs, eux même pointant sur des tableaux de Y éléments.
Le plus simple serait peut être de créer un tableau de X*Y élements. Tu accèdes à un élément (x, y) par Elements[Y*y + x]  



Reply

Marsh Posté le 15-02-2002 à 21:17:15    

Code :
  1. int *totaldalle = new int;
  2. *totaldalle     = (nbdalleX * nbdalleY);
  3. int *tdalle     = new int[*totaldalle]; // Creation d'un tableau de dalle
  4. for(int y = 0; y < nbdalleY; y++)
  5. {
  6.   for(int x = 0; x < nbdalleX; x++)
  7.   {
  8.     // Appel de dalle : Envoie la position de la dalle dans l'espace et sa couleur
  9.     cout << "Construction de la dalle : " << x << "," << y << endl;
  10.     dalle tdalle[y * nbdalleY + x] = 0;
  11.   }
  12. }


Ça, c'est pour un tableau d'entiers.

 

[jfdsdjhfuetppo]--Message édité par Krueger--[/jfdsdjhfuetppo]


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 15-02-2002 à 23:00:51    

dvincent a écrit a écrit :

int *totaldalle = new int;
*totaldalle=(nbdalleX*nbdalleY);
int tdalle[*totaldalle]; // Creation d'un tableau de dalle



Ca marche pas, ca. Pour déclarer un tableau avec un espace deja alloué, faut que le compilateur puisse déterminer la taille dès la compilation. Ca n'est pas le cas ici.

Reply

Marsh Posté le 16-02-2002 à 20:55:04    

Ben je sais pas trop, mais il devrait y avoir un moyen de déclarer un tableau de taille variable (avec l'opérateur new) plus ou moins de cette façon. Reste à voir la syntaxe exacte, je ne m'en souviens plus trop. :sweat:


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 16-02-2002 à 21:08:58    

C'est pas pour les objets le new.
Ici, je dirais plutot un malloc.

Reply

Marsh Posté le 17-02-2002 à 09:44:21    

bjbebert a écrit a écrit :

C'est pas pour les objets le new.Ici, je dirais plutot un malloc.  




 [:purljam]  [:purljam]  [:purljam] On aura tout lu ici.
Parce que malloc, c'est bien connu, ca appelle les constructeurs.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 17-02-2002 à 11:26:10    

Quelqu'un à une soluce pour ce problème de déclaration de tableau avec une variable et du coup blocage du compilo ? j'ai le même pb, une soluce m'interesse :D


---------------
Le topic du QLRR et FIRE - Knowledge is power. Power corrupts. Study hard, become evil.
Reply

Marsh Posté le 17-02-2002 à 15:38:23    

Ca semble tellement evident mais j'ai peut être pas compris la question. Perso, j'aurai fait ça :
 

Code :
  1. int largeur = 10;
  2. int hauteur = 20;  // un damier de 10 dalles sur 20 dalles
  3. // mon tableau 2D de ptr de dalle :
  4. Dalle*** tDalle = new (Dalle**)[largeur];
  5. for(int x=0; x<largeur; x++) {
  6.    tDalle[x] = new (Dalle*)[hauteur];
  7.    for(int y=0; y<hauteur; y++)
  8.       tDalle[x][y] = new Dalle(0,0,0);
  9. }
  10. // etc... le chemin inverse pour le delete


 
A ce propos, malloc est proscrit en C++


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 17-02-2002 à 15:38:23   

Reply

Marsh Posté le 17-02-2002 à 16:44:01    

J'ai trop du mal à me représenter ce qu'est un Dalle*** :D


---------------
Le topic du QLRR et FIRE - Knowledge is power. Power corrupts. Study hard, become evil.
Reply

Marsh Posté le 17-02-2002 à 16:46:54    

ah si ca y est je vois.
 
Le problème c'est que je crois que ce sera même problème pour dvincent puisque c'est le même principe : on passe une var en taille du tableau et apparament ca ne plait pas à son compilo. Essaie avec un const devant :??:


---------------
Le topic du QLRR et FIRE - Knowledge is power. Power corrupts. Study hard, become evil.
Reply

Marsh Posté le 17-02-2002 à 17:31:04    

gilou a écrit a écrit :

 
 [:purljam]  [:purljam]  [:purljam] On aura tout lu ici.
Parce que malloc, c'est bien connu, ca appelle les constructeurs.
A+,  



Qui a parlé d'objets ?? Pour moi, c'est juste un tableau de structures.
 
Edit : c bon, j'ai compris. J'ai oublié le ? à la fin de la première phrase. En fait, on est d'accord.

 

[jfdsdjhfuetppo]--Message édité par bjbebert--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 17-02-2002 à 17:35:56    

bjbebert a écrit a écrit :

Qui a parlé d'objets ?? Pour moi, c'est juste un tableau de structures.
 




En c++, une structure est une classe, elle a notamment un constructeur par défaut.

Reply

Marsh Posté le 17-02-2002 à 17:59:06    

slyde a écrit a écrit :

ah si ca y est je vois.
 
Le problème c'est que je crois que ce sera même problème pour dvincent puisque c'est le même principe : on passe une var en taille du tableau et apparament ca ne plait pas à son compilo. Essaie avec un const devant :??:  




 
C'est la seule manière. Si son compilo ne l'accepte pas c'est qu'il n'est pas ANSI.

Reply

Marsh Posté le 17-02-2002 à 18:01:47    

slyde a écrit a écrit :

J'ai trop du mal à me représenter ce qu'est un Dalle*** :D  




 
Ben c'est un pointeur vers un pointeur vers un pointeur d'un objet Dalle. T'as jamais vu de pointeurs ?  :??:  :??:  :??:  :??:

Reply

Marsh Posté le 17-02-2002 à 19:59:05    

tetragrammaton IHVH a écrit a écrit :

 
 
Ben c'est un pointeur vers un pointeur vers un pointeur d'un objet Dalle. T'as jamais vu de pointeurs ?  :??:  :??:  :??:  :??:  




 
si (malheureusement je serais content si je pouvais tjrs faire du passage par référence :D), mais mon cerveau gère mal d'une traite les 3 * d'un coup, ca me prends plusieurs secondes avant de capter :lol:
 
Question d'habitude je suppose...
 
Sinon VC++ 6 n'est pas AINSI alors :D


---------------
Le topic du QLRR et FIRE - Knowledge is power. Power corrupts. Study hard, become evil.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed