C++ tableaux 2D

Fermé
cristal - 22 déc. 2008 à 09:42
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 22 déc. 2008 à 13:10
Bonjour,

Je suis une DEBUTANTE en C++, et je rencontre l'erreur suivante lors de la compilation d'un programme :
error: cannot convert 'int (*)[3]' to 'int**' in return

En fait, j'ai une fonction de la forme int** fonction()
A l'interieur de fait une allocation statique de et je retourne t a la fin

int** fonction()
{
int t[3][2];
....
return t;
}

Je sens bien un conflit allocation dynamique/allocation statique, mais toutes mes tentatives de debuggage sont infructueuses. J'ai meme tente un changement en vector<vector<int>*>*, mais je n'arrive pas non plus a declarer correctement ce pointeur.

Please Help,

Merci par avance!

3 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
22 déc. 2008 à 10:25
Salut.
Je pense que ce que tu essai de faire est impossible.
le mieux est de déclarer t autrement. En plus, retourner un tableau statique : danger ! il risque d'être modifier alors que tu ne t'y attends pas.
En C++, le mieux est de faire une classe pour les tableaux 2D.
Sinon, déclare t autrement, en int* t[3] et ensuite alloue lui la place qu'il faut.
Les tableaux 2D ce n'est pas trop le point fort du C, et c'est le moins qu'on puisse dire.
0
Salut,

Merci pour la reponse,

En essayant de le declarer par
int* t[3]= new int[2];

J'obtiens l'erreur suivante (mon 't' est en fait 'timing' dans mon programme):
error: variable-sized object 'timing' may not be initialized

Y a-t-il une autre idee que de creer une classe Tableau2D? : J'aimerais eviter d'ecrire une nieme claase (je fais un projet informatique qui n'en finit plus).

Merci.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
22 déc. 2008 à 13:10
il faut dire, ton truc, c'est n'importe quoi.
Il faut le faire en 3 fois ;
int *t[3];
t[0]=new int[2];
t[1]=new int[2];
t[2]=new int[2];
à ta place je ferai une structure :
struct timing{int t[3][2];}
ensuite :
timing fonction()
{
   timing t;
   ...
   return t;
}

si tu veux, tu peux même te simplifier la vie en créant une méthode dans ta structure :
int* timing::operator[](int i){return t[i];}
0