Невозможно инициализировать целое число

У меня есть метод loading:

-(void)loading:(MKTileOverlayPath)path ... {
...

В рамках этого метода я пытаюсь вычислить что-то

NSInteger *a = pow(2, path.z) - path.y - 1;

Я получаю ошибку:

Инициализация NSInteger * (он же long *) выражением несовместимого типа double

Почему это двойной? path.z и path.y, как указано в документация MKTileOverlayPath, целое число. А также pow(2, path.z) не может привести к float или же double ни когда есть только integers… Это почему?

-2

Решение

Математически это не приведет к нецелочисленному значению, но это не контракт на pow() функция. В соответствии с http://www.cplusplus.com/reference/cmath/pow/, параметры неявно приводятся к значениям типа double, а возвращаемое значение функции всегда равно double.

0

Другие решения

У вас есть две ошибки:

  1. Стандарт С pow() производит double и это параметры также double — ваши целочисленные аргументы неявно приведены для вас. Нет версии для целочисленных типов. Лучшее решение не использовать приведения для получения целочисленного значения, которое вводит возможность ошибок до характера математики с плавающей точкой, но просто написать свою собственную целочисленную степенную функцию. Вы можете скопировать один в этот ответ — просто реализовать это с помощью целочисленного типа (int, long и т.д.) вам требуется.

  2. Вы перепутали тип переменной, типы объектов ссылочные типы и объявлены как указатели, например NSString *; простые числовые типы типы значений и не указатели, например NSInteger,

1

По вопросам рекламы [email protected]