2011-11-15 10 views
7

Estoy creando un proyecto GLUT/OpenGL en XCode 4. He agregado los frameworks glut/opengl, he enlazado todas mis bibliotecas, todo está bien, excepto por alguna razón mi main () function no aceptará glutInit (& argc, argv) y me da el mensaje de error de que "no hay una función de llamada coincidente para glutInit(). Lo extraño es que acepta algunas de las otras funciones de saturación como glutInitDisplayMode() y glutCreateWindow(), pero simplemente no glutInit().El proyecto XCode no puede reconocer ciertos comandos GLUT

Además, estoy usando 3 funciones de devolución de llamada

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

Mi proyecto ac solo acepta el primero, pero no reconoce los otros dos, dando el mismo error que con glutInit().

¿Alguna idea sobre qué podría estar yendo mal?

+3

Publica un programa completo y mínimo que demuestre el problema. – genpfault

Respuesta

1

No sé si usted encuentra su respuesta, pero parece que no se ha añadido el marco GLUT a su proyecto Xcode (Xcode asumiendo 4.x):

Haga clic en el icono de la parte superior-la mayoría de proyectos en el principal barra lateral de la ventana.

Haga clic en '+' en 'Enlace binario con bibliotecas' y busque 'exceso'.

Añade ese marco.

Asegúrese

#import <GLUT/glut.h> 

está en el archivo de cabecera.

33

He tenido exactamente el mismo error.

Finalmente he resuelto el problema haciendo cambios en el argumento de la función main().

Vea si el argv está declarado como const. Quitándolo del argumento de la función main, el error glutInit desapareció.

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

¿Puede alguien decir por qué sucede esto? Quiero decir sin 'const' funciona, con eso falla. – BRabbit27

+3

Es el problema de desajuste de tipo C++ que podría ser encontrado y resuelto fácilmente en otras situaciones. La declaración glutInit() de argv implica que los contenidos de argv son escribibles, pero en la función principal, el argv pasado a glutInit es de solo lectura y, por lo tanto, el conflicto. – Keugyeol

2

Según mi humilde opinión, es mejor const_cast argumentos de entrada para evitar la coincidencia de tipos en C++, echar un vistazo a la siguiente fragmento de código:

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

De esta manera usted manifiesta que el futuro lector de su programa que usted sabe que argv es una constante y por const_cast -hasta que sepa lo que está haciendo.

Cuestiones relacionadas