Quiero implementar una función con OpenGL para renderizar un cilindro en C++. La firma de mi función es la siguiente:Referencia a una matriz de dos dimesiones
#define POINTS_NUM 15
#define DEMESION 3
void drawCylinder(int slices, int segments, GLfloat (&vertices)[ POINTS_NUM ][ DEMESION ]);
Quiero utilizar una referencia a una matriz bidimensional para limitar la entrada del usuario, pero un comportamiento extraño está sucediendo. Cuando implemente la función declarada como anteriormente, se produce un error de vinculador:
Error 1 error LNK2005: "float (* vase)[3]" ([email protected]@3PAY02MA) already defined in shapes.obj vase.obj VaseAndAnimation
Aquí vase
se define como:
GLfloat vase[ POINTS_NUM ][ DEMESION ];
Al principio, pensé que había algo malo en la última dimensión. Así que lo omití en mi segunda prueba. Esta declaración momento de mi función es la siguiente:
void drawCylinder(int slices, int segments, GLfloat (&vertices)[ POINTS_NUM ][]);
Ahora un error en tiempo de compilación se produce cuando se invoca como (vase
definición no se cambia):
drawCylinder(10, 10, vase);
Error de compilación:
Error 1 error C2087: 'vertices' : missing subscript d:\visual studio 2008\projects\project1\computer graphics\vaseandanimation\shapes.h 25 VaseAndAnimation
Error 2 error C2664: 'drawCylinder' : cannot convert parameter 3 from 'GLfloat [14][3]' to 'GLfloat (&)[14][1]' d:\Visual Studio 2008\Projects\Project1\Computer Graphics\VaseAndAnimation\vase.cpp 64 VaseAndAnimation
Error 3 error C2087: 'vertices' : missing subscript d:\visual studio 2008\projects\project1\computer graphics\vaseandanimation\shapes.h 25 VaseAndAnimation
Error 4 error C2087: 'vertices' : missing subscript d:\Visual Studio 2008\Projects\Project1\Computer Graphics\VaseAndAnimation\shapes.cpp 12 VaseAndAnimation
De este error, puedo ver que el parámetro vertices
se trata realmente como una referencia a una matriz bidimensional, pero ¿por qué vase
se analiza como float (* vase)[3]
en mi primera versión?
Mi IDE es Visual Studio 2008. No lo he probado con GCC; ¿ese comportamiento es dependiente del compilador?
Espero que alguien pueda echarme una mano para deshacerse de la trampa.
posible duplicado de [¿Cómo se pasa una referencia a una matriz bidimensional a una función?] (Http://stackoverflow.com/questions/404232/how-do-i-pass-a- reference-to-a-two-dimensional-array-to-a-function) –