2009-05-04 8 views
1

Donc si j'exécute mon programme avec l'implémentation comme .m cela fonctionne très bien. Il suffit de le changer pour .mm les causes de cette ligne ...Xcode 'conversion invalide' lors de l'utilisation de l'objectif-C++

CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort]; 

à jeter cette erreur ...

error: invalid conversion from 'void*' to 'CGContext*' 

Quelqu'un a des idées pour lesquelles changeant juste qui en ferait exploser, ou comment y remédier?

Répondre

2

C++ n'autorise pas la diffusion de type implicite à partir de void*. Dans ce cas, la conversion implicite de void* (le type de retour de -[NSGraphicsContext graphicsPort]) est CGContextRef est illégale. Vous pouvez faire la conversion explicite comme ceci:

CGContextRef myContext = static_cast<CGContextRef>([[NSGraphicsContext currentContext] graphicsPort]); 

Voir this SO question pour une discussion de l'opérateur static_cast C++.

1

C permet de convertir void * en type arbitraire, ce qui n'est pas le cas de C++. Une fois que votre fichier est .mm il est compilé en C++:

cristi:tmp diciu$ cat test.c 
int main() 
{ 
    char * t = "test"; 
    void * m = t; 
    char * g; 

    g=m; 

} 

cristi:tmp diciu$ g++ test.c 
test.c: In function ‘int main()’: 
test.c:7: error: invalid conversion from ‘void*’ to ‘char*’ 

cristi:tmp diciu$ gcc test.c 

Pour fixer, jeter dans le type approprié, à savoir explicitement CAST "void *" à "CGContext *".

Questions connexes