gd 7.2.0无法识别std :: expf和std :: logf

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gd 7.2.0无法识别std :: expf和std :: logf相关的知识,希望对你有一定的参考价值。

似乎gcc(尝试过7.2.0和5.4.0)没有std::expfstd::logf - 请参阅coliru sample。既然cppreference说它们是在C ++ 11中添加的,那么我缺少一些gcc特定的宏,或者它们一般在gcc中丢失了吗?

答案

如果你

#include <cmath>

你会得到

float       exp ( float arg );
double      exp ( double arg );
long double exp ( long double arg );
double      exp ( IntegralType arg );

float       log ( float arg );
double      log ( double arg );
long double log ( long double arg );
double      log ( IntegralType arg );

因此你可以只调用std::exp / std::log并让编译器为你找出重载。如果你想调用不匹配的重载(例如float变量上的double重载),我发现在这些情况下添加static_cast更明确和清晰:

double bla = ...;
return std::exp(static_cast<float>(bla));

这是一个奇怪的结构你编写它的任何方式(例如为什么bla不是float开头?),并将其隐藏在单个字母的函数名称后缀中没有帮助任何人。

另一答案

为了让g ++使用C ++ 11,你需要添加

-std=c++11

到编译器命令行。

Ef。:

g++ -o test -std=c++11 test.cc
另一答案

GCC的<cmath>在全局命名空间中声明函数expflogf及其C Library kin,而不是std::。在std::,它宣布explog的重载达到同样的效果。

以上是关于gd 7.2.0无法识别std :: expf和std :: logf的主要内容,如果未能解决你的问题,请参考以下文章

函数对象无法识别它获得的 param(std::set<int>)

CLion无法解析类型std :: unordered_map,即使它提示我包含标题和编译工作

Visual Studio 无法识别标准库

gd-png 无法分配图像数据

GD 无法创建 JPG

无法通过Magento Cms wysiwyg编辑器添加图像