Desidero implementare una funzione con OpenGL per eseguire il rendering di un cilindro in C++. La firma della mia funzione è la seguente:Riferimento a una matrice bidimensionale
#define POINTS_NUM 15
#define DEMESION 3
void drawCylinder(int slices, int segments, GLfloat (&vertices)[ POINTS_NUM ][ DEMESION ]);
voglio usare un riferimento a una matrice bidimensionale per limitare l'input dell'utente, ma qualche strano comportamento sta accadendo. Quando ho implementare la funzione dichiarata come sopra, un errore si verifica linker:
Error 1 error LNK2005: "float (* vase)[3]" ([email protected]@3PAY02MA) already defined in shapes.obj vase.obj VaseAndAnimation
Qui vase
è definito come:
GLfloat vase[ POINTS_NUM ][ DEMESION ];
In un primo momento, ho pensato che ci fosse qualcosa di sbagliato con l'ultima dimensione. Quindi l'ho omesso nel mio secondo processo. Questa dichiarazione momento della mia funzione è simile a questo:
void drawCylinder(int slices, int segments, GLfloat (&vertices)[ POINTS_NUM ][]);
Ora un errore di compilazione si verifica quando viene richiamato come (vase
definizione non viene modificato): errore di
drawCylinder(10, 10, vase);
Compile:
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
Da questo errore, posso vedere che il parametro vertices
è veramente un riferimento a un array bidimensionale, ma perché vase
viene analizzato come float (* vase)[3]
nella mia prima versione?
Il mio IDE è Visual Studio 2008. Non l'ho provato con GCC; questo comportamento dipende dal compilatore?
Spero che qualcuno possa darmi una mano per liberarmi della trappola.
possibile duplicato di [Come faccio a passare un riferimento a un array bidimensionale a una funzione?] (Http://stackoverflow.com/questions/404232/how-do-i-pass-a- riferimento-a-un-bidimensionale-matrice-a-una-funzione) –