'powf' не является членом 'std'

У меня ошибка при компиляции библиотеки с помощью XCode:

'powf' is not a member of 'std'

<cmath> включен.

Может кто-нибудь объяснить мне, что происходит не так?


person Ziggy    schedule 30.03.2011    source источник
comment
По состоянию на июнь 2019 года в стандарте C++17 прямо указано, что <cmath> объявляет powf (а также sinf, logf и т. д.) внутри namespace std, но libstdc++ по-прежнему содержит ошибки. См. этот вопрос о C++17.   -  person Davislor    schedule 03.06.2019


Ответы (3)


До 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 г. (тихоокеанское стандартное время)

person paxdiablo    schedule 30.03.2011

Используйте только powpowf не является стандартным.

person Erik    schedule 30.03.2011

Он называется std::pow и перегружен для float и double.

person Sylvain Defresne    schedule 30.03.2011