Pregunta

Entonces, si ejecuto mi programa con la implementación como .m, funciona bien. Simplemente cambiándolo a .mm causa esta línea ...

CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];

para lanzar este error ...

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

¿Alguien tiene alguna idea de por qué solo cambiar eso haría explotar o cómo solucionarlo?

¿Fue útil?

Solución

C ++ no permite la conversión implícita de tipos desde void * . En este caso, la conversación implícita de void * (el tipo de retorno de - [NSGraphicsContext graphicsPort] ) a CGContextRef es ilegal. Puedes hacer la conversión explícita de esta manera:

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

Ver esta pregunta SO para una discusión de C ++ static_cast operator.

Otros consejos

C permite convertir void * a tipo arbitrario, C ++ no. Una vez que su archivo es .mm, se compila como 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

Para corregir, convertir al tipo correcto, es decir, emitir explícitamente " void * " a " CGContext * " ;.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top