Chcę zaimplementować funkcję z OpenGL do renderowania cylindra w C++. Podpis mojej funkcji jest następująca:Odniesienie do tablicy dwuwymiarowej
#define POINTS_NUM 15
#define DEMESION 3
void drawCylinder(int slices, int segments, GLfloat (&vertices)[ POINTS_NUM ][ DEMESION ]);
chcę użyć odniesienie do dwuwymiarowej tablicy w celu ograniczenia wprowadzania danych przez użytkownika, ale niektóre dziwne zachowanie się dzieje. Kiedy wdrożyć funkcję zadeklarowaną jak wyżej, wystąpi błąd Łącznik:
Error 1 error LNK2005: "float (* vase)[3]" ([email protected]@3PAY02MA) already defined in shapes.obj vase.obj VaseAndAnimation
Tutaj vase
jest zdefiniowany jako:
GLfloat vase[ POINTS_NUM ][ DEMESION ];
Na początku myślałem, że coś było nie tak z ostatniego wymiaru. Więc pominąłem to w mojej drugiej próbie. Ta deklaracja czas mojej funkcji jest tak:
void drawCylinder(int slices, int segments, GLfloat (&vertices)[ POINTS_NUM ][]);
Teraz błąd czasu kompilacji pojawia się, gdy wywołany jako (vase
definicja nie ulega zmianie):
drawCylinder(10, 10, vase);
Błąd kompilacji:
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
Z tego błędu wynika, że parametr vertices
jest traktowany jako odniesienie do dwuwymiarowej tablicy, ale dlaczego vase
jest analizowany jako float (* vase)[3]
w mojej pierwszej wersji?
My IDE to Visual Studio 2008. Nie próbowałem go z GCC; czy to zachowanie zależy od kompilatora?
Mam nadzieję, że ktoś może mi pomóc w pozbyciu się pułapki.
możliwe duplikat [Jak przechodzą odniesienie do tablicy dwuwymiarowej do funkcji?] (Http://stackoverflow.com/questions/404232/how-do-i-pass-a- odwołanie do dwuwymiarowej tablicy do funkcji) –