2009-05-04 6 views
1

Also wenn ich mein Programm mit der Implementierung als .m läuft es gut. Ändern Sie es einfach .MM Ursachen diese Linie ...Xcode 'ungültige Konvertierung' bei Verwendung von Objective-C++

CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort]; 

diesen Fehler zu werfen ...

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

Wer irgendwelche Ideen, warum Änderungen sind nur, dass es die Luft sprengen würde, oder wie man es beheben?

Antwort

2

C++ erlaubt kein implizites Gießen von void*. In diesem Fall ist die implizite Umwandlung von void* (der Rückgabetyp -[NSGraphicsContext graphicsPort]) ein CGContextRef ist illegal. Sie können die Konvertierung explizit wie folgt machen:

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

Siehe this SO Frage für eine Diskussion des C++ static_cast Operator.

1

C ermöglicht die Konvertierung void * in einen beliebigen Typ, C++ nicht. Sobald Ihre Datei ist .mm es als C++ kompiliert wird:

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 

zu beheben, um eine ordnungsgemäße Art werfen, das heißt ausdrücklich "void *" auf "CGContext *" gegossen.

Verwandte Themen