2011-11-15 7 views
7

Sto creando un progetto GLUT/OpenGL in XCode 4. Ho aggiunto i framework glut/opengl, ho collegato tutte le mie librerie - tutto va bene, tranne che per qualche motivo il mio principale () la funzione non accetta glutInit (& argc, argv) e mi dà il messaggio di errore che "non c'è alcuna chiamata di funzione corrispondente a glutInit(). La cosa strana però è che accetta alcune delle altre funzioni di glut come glutInitDisplayMode() e glutCreateWindow(), ma semplicemente non glutInit().Il progetto XCode non è in grado di riconoscere determinati comandi GLUT

Inoltre, sto usando 3 funzioni di callback

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

Il mio progetto ac cepts solo il primo, ma non riconosce gli altri due, dando lo stesso errore di glutInit().

Qualche idea su cosa potrebbe andare storto?

+3

Invia un programma completo e minimale che mostri il problema. – genpfault

risposta

1

Boh Se hai trovato la tua risposta, ma sembra che tu non hai aggiunto il quadro GLUT al progetto Xcode (supponendo Xcode 4.x):

Cliccare sulla-più alto sull'icona del progetto nella principale barra laterale della finestra.

Fare clic su "+" sotto "Collega binario con librerie" e cercare "glut".

Aggiungi questo quadro.

Assicurarsi

#import <GLUT/glut.h> 

si trova nel file di intestazione.

33

Ho avuto esattamente lo stesso errore.

Ho finalmente risolto il problema apportando modifiche all'argomento della funzione main().

Vedere se lo argv è dichiarato come const. L'eliminazione dell'argomento della funzione main effettuata scompare glutInit.

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

Qualcuno può dire perché sta succedendo? Voglio dire senza 'const' funziona, con esso fallisce. – BRabbit27

+3

È il problema di mancata corrispondenza di tipo C++ che potrebbe essere facilmente trovato e risolto in altre situazioni. La dichiarazione glutInit() di argv implica che i contenuti di argv sono scrivibili, ma nella funzione principale l'argv passato a glutInit è di sola lettura, quindi il conflitto. – Keugyeol

2

Secondo il mio modesto parere, è meglio const_cast argomenti di input per evitare di tipo non corrispondente in C++, dare un'occhiata al il frammento di codice qui sotto:

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

In questo modo si presentatevi al lettore futuro del tuo programma che sai che argv è una costante e da const_cast -se sai cosa stai facendo.