2011-11-15 15 views
7

Tworzę projekt GLUT/OpenGL w XCode 4. Dodałem frameworki glut/opengl, połączone ze sobą wszystkie moje biblioteki - wszystko jest dobre, z wyjątkiem jakiegoś powodu mój główny () nie zaakceptuje glutInit (& argc, argv) i wyświetli mi komunikat o błędzie, że "nie ma odpowiadającego wywołania funkcji do glutInit(). Dziwne jest jednak to, że akceptuje niektóre z innych funkcji glut, takich jak glutInitDisplayMode() i glutCreateWindow(), ale po prostu nie glutInit().Projekt XCode nie może rozpoznać niektórych komend GLUT

również używam 3 funkcje zwrotne

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

Mój projekt ac cepts tylko pierwszy, ale nie rozpoznaje dwóch pozostałych, podając ten sam błąd, co z glutInit().

Jakieś pomysły na to, co może pójść nie tak?

+3

Prześlij kompletny, minimalny program demonstrujący problem. – genpfault

Odpowiedz

1

Nie wiem, czy znalazłeś odpowiedzi na swoje pytanie, ale wygląda na to, że nie zostały dodane ramy Glut do projektu Xcode (zakładając Xcode 4.x):

Kliknij na najwyższym, ikonie projektu w głównym boczny pasek okna.

Kliknij "+" pod "Link Binary With Libraries" i wyszukaj "Glut".

Dodaj tę strukturę.

Upewnij

#import <GLUT/glut.h> 

Czy w pliku nagłówka.

33

Miałem dokładnie ten sam błąd.

W końcu rozwiązałem problem, wprowadzając zmiany w argumencie funkcji main().

Sprawdź, czy argv jest zadeklarowany jako const. Usunięcie błędu z argumentu funkcji main zlikwidowano glutInit.

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

Czy ktoś może powiedzieć, dlaczego tak się dzieje? Mam na myśli, że bez 'const' działa, z tym, że zawiedzie. – BRabbit27

+3

Jest to problem niedopasowania typu C++, który można łatwo znaleźć i rozwiązać w innych sytuacjach. glutInit() deklaracja argv oznacza, że ​​zawartość argv jest zapisywalna, ale w głównej funkcji argv przekazanej do glutInit jest tylko do odczytu, stąd konflikt. – Keugyeol

2

Zgodnie z moim skromnym zdaniem, lepiej const_cast argumentów wejściowych w celu uniknięcia niezgodność typów w C++, warto zapoznać się z fragmentem kodu poniżej:

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

ten sposób wyrażają się przyszłego czytelnika twojego programu, który wiesz, że argv jest stałą i przez const_cast - wiesz, co robisz.

Powiązane problemy