У меня ошибка при компиляции библиотеки с помощью XCode:
'powf' is not a member of 'std'
<cmath>
включен.
Может кто-нибудь объяснить мне, что происходит не так?
У меня ошибка при компиляции библиотеки с помощью XCode:
'powf' is not a member of 'std'
<cmath>
включен.
Может кто-нибудь объяснить мне, что происходит не так?
До C++11 powf
был просто Майкрософтизм. Он вообще не фигурировал в стандарте ISO, поэтому вряд ли будет в XCode, если только они не адаптируют причудливые методы Microsoft, что я считаю маловероятным.
pow
, с другой стороны, дольше была частью библиотеки C++ в силу того факта, что она находится в более ранних итерациях библиотеки C, которая включена в C++ до версии 11. Используйте это вместо этого.
Начиная с C++11, powf
действительно появляется в стандарте ISO и является частью пространства имен std
.
Тем не менее, существуют несовместимые реализации, например, gcc libstdc++. Дополнительные ресурсы в этом отрывке взяты из обсуждения на странице обсуждения cppreference:
Ответы, опубликованные выше, были правильными до С++ 11, поскольку С++ 98/03 еще не ссылался на библиотеку C99. В соответствии с текущим стандартом,
powf
объявляется в пространстве именstd
при включении (явно упоминается начиная с C++17, неявно упоминается в C++11/14, см. также N4659, N4140 и N3337 а>). Дляstd::powf
gcc libstdc++ несовместим, а clang libc++. --Fruderica (разговор) 03:49, 19 февраля 2019 г. (PST)См. также этот более свежий ответ SO: https://stackoverflow.com/a/54735351 --Cubbi (talk) 08 :10, 19 февраля 2019 г. (тихоокеанское стандартное время)
Используйте только pow
— powf
не является стандартным.
Он называется std::pow
и перегружен для float
и double
.
<cmath>
объявляетpowf
(а такжеsinf
,logf
и т. д.) внутриnamespace std
, но libstdc++ по-прежнему содержит ошибки. См. этот вопрос о C++17. - person Davislor   schedule 03.06.2019