probleme sur les tableaux (dynamiques ou statiques) a deux dimensions
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:
Code:
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];
} |
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:
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];
} |
je recopie le code, et là paf, rebelote, toujours la même erreur.
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
Code:
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);
} |
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 -_-
l'erreur me renvoie a la ligne du malloc (ou new dans els version c++):
Citation:
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'
et pour ma premiere version, la même erreur:
Citation:
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'
Donc je ne sais vraiment plus quoi penser...
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:
Code:
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 |
je fais donc appel a vous, si quelqu'un peut m'aider a résoudre le probleme ou a me donner une autre solution