Se connecter / S'enregistrer
Votre question

tableau à 2 dimensions en C++

Tags :
  • Direct
  • Programmation
Dernière réponse : dans Programmation
11 Janvier 2006 22:43:53

Bonjour,

j'ai un problème pour retourner un tableau à 2 dimensions en C++

mon code :

fichier.h

int w, h;
int ** ma fonction (); // il n'aime pas non plus int [][] ma fonction ();

fichier.cpp

int ** ma fonction()
{
int tab [w][h];
return tab;
}

merci de votre aide d'avance

Autres pages sur : tableau dimensions

12 Janvier 2006 00:03:12

Salut
une fonction ne peux renvoyer un tableau !!
Mais le tableau s appel par adresse donc tu passe le tableau a ta fonction tu le modifie et les modifications sont effectuer sur le tableau direct !!!!

Bon je viens de me relire je suis pas clair mais la je suis crevé donc attend le passage de cricky sur le forum et tu aura une réponse clair!!

ps: si tu as compris tant mieux c'est ce que je pouvais faire de mieux tellement je suis crevé!
12 Janvier 2006 00:30:26

Soit tu passes le tableau en argument à la fonction, soit la fonction renvoie un pointeur vers ce tableau.


int ** ma fonction (); // il n'aime pas non plus int [][] ma fonction ();
ca ne marche pas parce que le compilateur doit connaître la taille du tableau pour réserver l'espace en mémoire

et n'oublie pas le void dans le prototype et la déclaration de la fonction :
int ** ma fonction ( void );

ca m'étonnerait que int tab [w][h] fonctionne parce que le compilateur là aussi ne connait pas la taille à allouer en mémoire. Si tu veux des dimensions définies à l'éxécution il faut faire une allocation dynamique
Contenus similaires
12 Janvier 2006 10:50:30

salut,

plusieurs problèmes dans ce que tu souhaites faire :

  1. int ** ma fonction()
  2. {
  3. int tab [w][h];
  4. return tab;
  5. }

comme on te l'a dit, à moins que w et h soit des définitions ou des constantes ça ne marchera pas(#define w, ou const int w ...).
De plus ton tableau tab est défini en local dans ta fonction "fonction", renvoyer un pointeur n'a aucun sens puisque ce tableau n'existe plus dès que l'on sort de cette fonction.
Imaginons cependant que ton tableau soit global et que tu veuilles le retourner par une fonction ...
Alors le code suivant est tout a fait valide.
  1. const int w=5,h=6;
  2. int tab[w][h];
  3. int ** toto (void);
  4. int ** toto(void)
  5. {
  6. tab[2][3]=5;
  7. return (int**)tab;
  8. }
  9. int main(int argc, char *argv[])
  10. {
  11. int **piTab=toto();
  12. }


A moins que tu ne sois contraint de renvoyer un tableau, le mieux reste de passer ce tableau par réference à la fontion qui doit la modifier.
12 Janvier 2006 10:57:27

Y'a un intérêt à écrire le prototype puis tout de suite la fonction ?
Citation :

int ** toto (void);
int ** toto(void)
{
...
}
12 Janvier 2006 11:30:26

non aucun, j'ai recopié comme un con ce qu'il avait écrit =)
12 Janvier 2006 12:37:28

merci pour votre aide, je pense que je vais le passer en paramètre en effet
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS