Xcode "تحويل غير صالح" عند استخدام Objective-C ++
سؤال
لذلك إذا قمت بتشغيل برنامجي مع التنفيذ كـ .m ، فهو يعمل بشكل جيد. مجرد تغييره إلى .mm يسبب هذا الخط ...
CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];
لرمي هذا الخطأ ...
error: invalid conversion from 'void*' to 'CGContext*'
أي شخص لديه أي أفكار لماذا مجرد تغيير هذا من شأنه أن يجعلها تفجر ، أو كيفية إصلاحها؟
المحلول
لا يسمح C ++ بإلغاء النوع الضمني من void*
. في هذه الحالة ، فإن التحويل الضمني من void*
(نوع العودة من -[NSGraphicsContext graphicsPort]
) أ CGContextRef
غير قانوني. يمكنك جعل التحويل صريحًا مثل هذا:
CGContextRef myContext = static_cast<CGContextRef>([[NSGraphicsContext currentContext] graphicsPort]);
نرى هذه لذا سؤال لمناقشة C ++ static_cast
المشغل أو العامل.
نصائح أخرى
C يسمح بتحويل void * إلى النوع التعسفي ، لا C ++ لا. بمجرد أن يكون ملفك .mm ، يتم تجميعه على أنه 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
لإصلاح ، يلقي إلى النوع المناسب ، أي إلقاء "void *" بشكل صريح إلى "CGContext *".
لا تنتمي إلى StackOverflow