尽管据称在 cmath 中定义了数学特殊函数,但未找到

问题描述 投票:0回答:1

我需要使用cmath

header
中定义的对数积分函数。不幸的是,当我尝试编译它时,我得到了一个
error: no member named 'expint' in namespace 'std'
。要重现此错误,您只需尝试编译此文件即可。

#include <algorithm>
#include <cmath>
#include <iostream>
#include <vector>
  
int main()
{
    std::cout << "Ei(0) = " << std::expint(0) << '\n'
              << "Ei(1) = " << std::expint(1) << '\n'
              << "Gompertz constant = " << -std::exp(1) * std::expint(-1) << '\n';
}

我尝试编译指定 std 库的此文件:

c++17
gnu++17
gnu++20
gnu++2b
,每次都会遇到相同的错误。我使用的是带有编译器的 M1 Mac

Apple clang version 14.0.3 (clang-1403.0.22.14.1)
Target: arm64-apple-darwin23.2.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

问题是什么?为什么这个函数没有定义在

cmath
上?

c++ standard-library
1个回答
5
投票

std::expint
及其家族是在 C++17 中引入的,并且根据 cppreference 编译器支持页面 目前仅 GGC 7+ (libstdc++)、MSVS 19.14+ 和 Embarcadero 10.3+ 支持它们。

如果您想立即使用这些功能,您将需要使用自制程序并使用 libstdc++ 获取 GCC 或 Clang,或者以某种方式获取 MSVS。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.