Xcode "تحويل غير صالح" عند استخدام Objective-C ++

StackOverflow https://stackoverflow.com/questions/818892

  •  03-07-2019
  •  | 
  •  

سؤال

لذلك إذا قمت بتشغيل برنامجي مع التنفيذ كـ .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 *".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top