2011-11-15 14 views
7

Tôi đang tạo dự án GLUT/OpenGL trong XCode 4. Tôi đã thêm khung công tác glut/opengl, liên kết tất cả thư viện của tôi với nhau, ngoại trừ một số lý do chính của tôi () chức năng sẽ không chấp nhận glutInit (& argc, argv) và cung cấp cho tôi thông báo lỗi rằng "không có hàm gọi hàm nào tương ứng với glutInit() .Điều kỳ lạ là nó chấp nhận một số hàm glut khác như glutInitDisplayMode() và glutCreateWindow() nhưng chỉ không glutInit().Dự án XCode không thể nhận ra các lệnh GLUT nhất định

Ngoài ra, tôi đang sử dụng 3 chức năng gọi lại

glutDisplayFunc(DisplayCallback)  
glutReshapeFunc(ReshapeCallback)  
glutKeyboardFunc(KeyboardCallback) 

My dự án ac chỉ cepts cái đầu tiên, nhưng không nhận ra hai cái còn lại, cho cùng một lỗi như với glutInit().

Bất kỳ ý tưởng nào về những gì có thể xảy ra sai?

+3

Đăng chương trình hoàn chỉnh, tối thiểu thể hiện sự cố. – genpfault

Trả lời

1

Dunno nếu bạn tìm thấy câu trả lời của bạn, nhưng nó có vẻ như bạn chưa thêm khuôn khổ thị trường bất động cho dự án Xcode của bạn (giả sử Xcode 4.x):

Bấm trên hầu hết các top-biểu tượng dự án trong chính thanh bên của cửa sổ.

Nhấp vào '+' trong 'Liên kết nhị phân với thư viện' và tìm kiếm 'glut'.

Thêm khuôn khổ đó.

Hãy chắc chắn rằng

#import <GLUT/glut.h> 

là trong tập tin tiêu đề của bạn.

33

Tôi đã có cùng một lỗi chính xác.

Cuối cùng tôi đã giải quyết được vấn đề bằng cách thay đổi đối số của hàm main().

Xem nếu argv được khai báo là const. Xóa nó khỏi đối số chức năng main khiến lỗi glutInit biến mất.

// delete const from argv declaration 
int main(int argc, const char * argv[]) // from this, 
int main(int argc, char * argv[])  // to this. 
+0

Ai đó có thể cho biết lý do tại sao điều này xảy ra? Tôi có nghĩa là không có 'const' nó hoạt động, với nó không thành công. – BRabbit27

+3

Đây là vấn đề không khớp loại C++ có thể dễ dàng tìm thấy và giải quyết trong các tình huống khác. glutInit() tuyên bố của argv ngụ ý các nội dung của argv có thể ghi được nhưng trong chức năng chính argv thông qua để glutInit là chỉ đọc do đó xung đột. – Keugyeol

2

Theo thiển ý của tôi, nó tốt hơn để const_cast đối số đầu vào để tránh loại không phù hợp trong C++, hãy nhìn vào đoạn mã dưới đây:

glutInit(&argc, const_cast<char**>(argv)); 

Bằng cách này bạn có nghĩa với người đọc tương lai của chương trình mà bạn biết rằng argv là một hằng số và bằng const_cast -cho bạn biết bạn đang làm gì.