Идентичный код генерирует ошибку в одном проекте, но не в другом - PullRequest
3 голосов
/ 28 января 2012

Я пытаюсь повторно использовать код из другого проекта, но, копируя классы, он генерировал ошибку компилятора в новом проекте, но, хотя это было в другом проекте, он работал просто отлично.

Ошибка

    Cannot initialize a parameter of type 'const uint8_t *' (aka 'const unsigned char *') with an rvalue of type 'const void *'

и код

    [outputStream write:[userdata bytes] maxLength:[userdata length]];

outputStream - это NSOutputStream, а userdata - это объект NSData. Один и тот же код, окружающий это утверждение, используется в обоих проектах.

Оба проекта компилируются для одной и той же целевой ОС (iOS 5.0) и архетектуры (armv7), и в обоих добавлены идентичные фреймворки.

Я также попытался очистить проект и собрать его заново. Та же проблема.

Любая помощь будет оценена.

Ответы [ 3 ]

3 голосов
/ 30 января 2012

В конце концов это было решено кастом:

[outputStream write:(const uint8_t *)[userdata bytes] maxLength:[userdata length]];

с последующей очисткой и сборкой (без очистки возникнет другая ошибка.)

2 голосов
/ 28 января 2012

Я предполагаю, что старый проект использует компилятор GCC, а новый проект использует LLVM.Так что ошибка исходит от внешнего интерфейса Clang.Если вы измените свой компилятор на GCC или LLVM GCC, он должен исчезнуть.

0 голосов
/ 21 июля 2012

Да, кастинг - это то, что нужно, и лучший способ сделать это:

[outputStream write:static_cast<const uint8_t *>([userdata bytes]) maxLength:[userdata length]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...