Question

Donc, si je lance mon programme avec l'implémentation en .m, cela fonctionne bien. Il suffit de le remplacer par .mm pour que cette ligne & # 8230;

CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];

lancer cette erreur & # 8230;

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

Quelqu'un a une idée de la raison pour laquelle il suffit de changer pour le faire exploser ou de le réparer?

Était-ce utile?

La solution

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

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

Voir la question sur SO pour une discussion de la C ++ static_cast opérateur.

Autres conseils

C permet de convertir void * en type arbitraire, pas C ++. Une fois que votre fichier est au format .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 corriger, transtypez le type approprié, c’est-à-dire explicitement & vo; void * " vers "CGContext *".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top