Bonjour a tous,
Je connais déjà bien le principe de l'allocation dynamique, mais je bute sur un probleme inconnu.
Je veux créer un tableau a deux dimensions de façon dynamique. Il s'agit d'un tableau de GLFfloat (opengl, avec défini dans le header gl.h: typedef float GLfloat; ).
Mon code est donc le suivant:
mais ce code ne passe pas à la compilation. Après moultes essais, je retrouve un ancien source de TP ou je manipulait des tableau de la même façon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 GLfloat **light_position; light_position=new GLfloat*[6]; for(int i=0;i<6;i++){ light_position[i]=new Glfloat[4]; }
je recopie le code, et là paf, rebelote, toujours la même erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int ** mat; //création de la matrice: mat=new int*[largeur]; for(int i=0;i<=(largeur-1);i++){ mat[i]=new int[hauteur]; }
Bizarre parce que mon code compilait sous visual c++ 6.0, et sous linux (gcc)
Je parcours donc un peu le forum et la faq et je tombe sur ça:
http://c.developpez.com/faq/c/?page=...bleau_2D_alloc
Je n'aime pas vraiment employer les malloc en c++ (le new est fait pour les fénéants après tout), et surprise.... ça ne fonctionne toujours pas -_-
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 /* METHODE 1 */ char **tab; /* Allocation de la 1er dimension */ tab = malloc ( sizeof(*tab) * taille); /* Allocation des tableaux */ for (i=0; i<taille; i++) { tab[i] = malloc ( sizeof(**tab) * taille2); }
l'erreur me renvoie a la ligne du malloc (ou new dans els version c++):
et pour ma premiere version, la même erreur:error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2040: 'tab' : 'int' differs in levels of indirection from 'char **'
error C2440: 'initializing' : cannot convert from 'void *' to 'int'
Donc je ne sais vraiment plus quoi penser...error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2040: 'light_position' : 'int' differs in levels of indirection from 'GLfloat **'
error C2440: 'initializing' : cannot convert from 'GLfloat **' to 'int'
Mes 2 hypotheses sont:
- je ne suis vraiment bigleux, j'ai fait une erreur que je n'arrive pas a voir
- mon compilo fait le difficile (visual c++ 2005).
J'avais pensé a des solutions alternatives, excepté les vecteurs. En fait, le tableau que je veux créer n'est pas vraiment dynamique, mais je n'arrive pas a le remplir autrement. J'ai essayé différentes versions:
je fais donc appel a vous, si quelqu'un peut m'aider a résoudre le probleme ou a me donner une autre solution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 GLfloat tab[6][4]; tab[i]= {x, x, x, x}; //ne compile pas GLfloat tab[6][4]; GLfloat tab_2[4]={x, x, x, x}; tab[i]=&tab_2[0]; //ne compile pas GLfloat tab[6][4]={ {x,x,x,x}, ..., {x,x,x,x} } //compile, mais ce n'est pas ce que je veux faire puisque le remplissage se fait après la déclaration. GLfloat tab[6][4]; tab[0][0]=x ... tab[0][n]=x tab[n][0]=x .. tab[n][n]=x //compile aussi, mais je vais pas me tapper le remplissage cellule par cellule! OO
Partager