andandandand
andandandand

Reputation: 22270

What's wrong with this array declaration?

I created this array this array inside a function, with the variable MODEL_VERTEX_NUM initialized @ runtime, which, I guess, is the sticking point here.

loat model_vertices [][]= new float [MODEL_VERTEX_NUM][3];

I got the following errors:

1>.\GLUI_TEMPLATE.cpp(119) : error C2087: 'model_vertices' : missing subscript
1>.\GLUI_TEMPLATE.cpp(119) : error C2440: 'initializing' : cannot convert from 'float (*)[3]' to 'float [][1]'

I realize that when I do:

float model_vertices *[]= new float [MODEL_VERTEX_NUM][3];

The compiler lets this pass, but I wanna understand what's wrong with the previous declaration.

So, what's wrong with the [][] declaration?

Upvotes: 4

Views: 313

Answers (1)

Werner Henze
Werner Henze

Reputation: 16781

For a two-dimensional array a[X][Y] the compiler needs to know Y to generate code to access the array, so you need to change your code to

float (*model_vertices) [3] = new float [2][3];

If you have an array of type T a[X][Y] and want to access a[x][y] that is equivalent to accessing *(((T*)(&a[0][0])) + x*Y + y). As you can see the compiler needs to know Y but not X to generate code for accessing the array.

Upvotes: 9

Related Questions