我需要使用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
上?
std::expint
及其家族是在 C++17 中引入的,根据 cppreference 编译器支持页面,目前仅 GGC 7+、MSVS 19.14+ 和 Embarcadero 10.3+ 支持它们。
如果你现在想使用这些功能,你将需要使用自制程序并获取 GCC 或 MSVS。