我想用OpenGL實現一個函數來渲染C++中的圓柱體。我的功能的簽名如下:參考二維陣列
#define POINTS_NUM 15
#define DEMESION 3
void drawCylinder(int slices, int segments, GLfloat (&vertices)[ POINTS_NUM ][ DEMESION ]);
我想使用對二維數組的引用來限制用戶輸入,但一些奇怪的行爲正在發生。當我實現如上聲明的函數時,鏈接器錯誤:
Error 1 error LNK2005: "float (* vase)[3]" ([email protected]@3PAY02MA) already defined in shapes.obj vase.obj VaseAndAnimation
這裏vase
被定義爲:
GLfloat vase[ POINTS_NUM ][ DEMESION ];
起初,我還以爲有什麼不對的最後一個維度。所以我在第二次審判中忽略了它。我的功能的這次聲明是這樣的:
void drawCylinder(int slices, int segments, GLfloat (&vertices)[ POINTS_NUM ][]);
現在編譯時錯誤時爲(vase
定義不改變)被調用時:
drawCylinder(10, 10, vase);
編譯錯誤:
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
從這個錯誤,我可以看到參數vertices
真的被視爲一個二維數組的參考,但爲什麼vase
解析爲float (* vase)[3]
在我的第一個版本?
我的IDE是Visual Studio 2008.我還沒有嘗試過使用GCC;那是行爲編譯器依賴的?
希望有人能幫我擺脫陷阱。
可能的重複[如何將對二維數組的引用傳遞給函數?](http://stackoverflow.com/questions/404232/how-do-i-pass-a-參考到二維陣列到函數) – 2010-06-24 04:37:01