【问题标题】:'powf' is not a member of 'std'“powf”不是“std”的成员
【发布时间】:2021-07-08 05:56:27
【问题描述】:

我在使用 XCode 编译库时出错:

'powf' is not a member of 'std'

<cmath> 已包含在内。

有人可以向我解释发生了什么问题吗?

【问题讨论】:

  • 截至 2019 年 6 月,C++17 标准明确规定 <cmath>namespace std 中声明 powf(以及 sinflogf 等),但libstdc++ 仍然有问题。见this question about C++17.
  • 我投票结束这个问题,因为它已经有 10 年了,还有 4 个 C++ 版本;答案大多是“那不是标准的 C++03”的形式;恕我直言,它在网站上不再有用。
  • 我认为它应该保持打开状态。 g++(例如版本 11.2.0,Ubuntu 22.04 上的标准版本)仍然 似乎没有该功能,尽管它是自 C++11 以来的标准...

标签: c++ std


【解决方案1】:

在 C++11 之前,powf 只是一个 Microsoft-ism。它根本没有出现在 ISO 标准中,因此不太可能出现在 XCode 中,除非他们要适应 Microsoft 的怪异做法,我认为这不太可能。

另一方面,pow 是 C++ 库的一部分,因为它在 C 库的早期迭代中并入 C++ pre-11。改用它。

自 C++11 起,powf确实出现在 ISO 标准中,并且是 std 命名空间的一部分。

尽管如此,还是有一些不兼容的实现,例如 gcc libstdc++。更多资源摘自cppreference talk page 中的讨论:

上面发布的答案在 C++11 之前是正确的,因为 C++98/03 还没有引用 C99 库。根据current standardpowf 是在命名空间std 中声明的(自 C++17 起明确提及,在 C++11/14 中隐含提及,另请参见 N4659N4140 和 @ 987654326@)。对于std::powf,gcc libstdc++ 与clang libc++ is 不兼容。 --Fruderica(谈话)2019 年 2 月 19 日 03:49(太平洋标准时间)

另请参阅此,更新,SO 答案:https://stackoverflow.com/a/54735351 --Cubbi(谈话)08:10,2019 年 2 月 19 日(太平洋标准时间)

【讨论】:

    【解决方案2】:

    只使用pow - powf 不是标准的。

    【讨论】:

      【解决方案3】:

      它被命名为std::pow 并为floatdouble 重载。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-29
        • 1970-01-01
        相关资源
        最近更新 更多