我在一个函数中创建了这个数组这个数组,变量MODEL_VERTEX_NUM初始化为@ runtime,我想这是这里的关键点.
loat model_vertices [][]= new float [MODEL_VERTEX_NUM][3];
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
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]'
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我意识到:
float model_vertices *[]= new float [MODEL_VERTEX_NUM][3];
Run Code Online (Sandbox Code Playgroud)
编译器允许这个传递,但我想了解前一个声明的错误.
那么,[][]宣言有什么问题?
对于二维数组a [X] [Y]编译器需要知道y以生成代码来访问数组,所以你需要改变你的代码
float (*model_vertices) [3]= new float [2][3];
Run Code Online (Sandbox Code Playgroud)
如果你有一个类型为T a [X] [Y]的数组,并想要访问相当于访问([(T)(&a [0] [0]))+ x*Y 的[x] [y] + y).正如您所看到的,编译器需要知道Y而不是X才能生成用于访问数组的代码.