Tôi muốn triển khai hàm có OpenGL để hiển thị một hình trụ trong C++. Chữ ký của chức năng của tôi như sau:Tham chiếu đến Mảng hai chiều
#define POINTS_NUM 15
#define DEMESION 3
void drawCylinder(int slices, int segments, GLfloat (&vertices)[ POINTS_NUM ][ DEMESION ]);
Tôi muốn sử dụng tham chiếu đến mảng hai chiều để giới hạn đầu vào của người dùng nhưng một số hành vi lạ đang xảy ra. Khi tôi thực hiện các chức năng tuyên bố như trên, một mối liên kết lỗi xảy ra:
Error 1 error LNK2005: "float (* vase)[3]" ([email protected]@3PAY02MA) already defined in shapes.obj vase.obj VaseAndAnimation
Đây vase
được định nghĩa là:
GLfloat vase[ POINTS_NUM ][ DEMESION ];
Lúc đầu, tôi nghĩ rằng có điều gì đó sai trái với kích thước cuối cùng. Vì vậy, tôi bỏ qua nó trong thử nghiệm thứ hai của tôi. tuyên bố thời điểm này trong chức năng của tôi là như thế này:
void drawCylinder(int slices, int segments, GLfloat (&vertices)[ POINTS_NUM ][]);
Bây giờ một lỗi thời gian biên dịch xảy ra khi gọi như (vase
định nghĩa là không thay đổi):
drawCylinder(10, 10, vase);
Compile error:
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
Từ lỗi này, tôi có thể thấy thông số vertices
thực sự được coi là tham chiếu đến mảng hai chiều, nhưng tại sao lại là vase
được phân tích cú pháp thành float (* vase)[3]
trong phiên bản đầu tiên của tôi?
IDE của tôi là Visual Studio 2008. Tôi chưa thử với GCC; là hành vi phụ thuộc vào trình biên dịch?
Hy vọng ai đó có thể cho tôi một tay để loại bỏ cái bẫy.
thể trùng lặp của [Làm thế nào để vượt qua một tham chiếu đến một mảng hai chiều để một chức năng?] (Http://stackoverflow.com/questions/404232/how-do-i-pass-a- reference-to-a-two-array-array-to-a-function) –