Xcode 'недопустимое преобразование' при использовании target-c ++ - PullRequest
1 голос
/ 04 мая 2009

Так что, если я запускаю свою программу с реализацией как .m, она работает нормально. Просто изменить его на .mm вызывает эту строку ...

CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];

чтобы выбросить эту ошибку…

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

У кого-нибудь есть идеи, почему простое изменение может привести к взрыву или как это исправить?

Ответы [ 2 ]

2 голосов
/ 04 мая 2009

C ++ не разрешает неявное приведение типов из void*. В этом случае неявный разговор из void* (тип возврата -[NSGraphicsContext graphicsPort]) и CGContextRef недопустим. Вы можете сделать преобразование явным, как это:

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

См. этот ТАК вопрос об обсуждении оператора C ++ static_cast.

1 голос
/ 04 мая 2009

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 *".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...