我读到使用最大双精度值的标准C ++方法是std::numeric_limits<double>::max
。
然后在我的每个函数中,我想初始化我的双打作为我使用的最大双倍:
#include <limits>
#define MAX_DOUBLE (std::numeric_limits<double>::max)
使用gcc -pedantic -pedantic-errors -Wall -Wextra -Werror,我收到以下错误:
Cannot convert 'double (*)() noexcept' to 'double' in initialization
你能解释一下这个错误吗?
答案 0 :(得分:3)
正如错误消息所述,您直接使用函数指针(double (*)() noexcept
)作为double
。 std::numeric_limits<double>::max
被声明为函数,您需要调用它来获取值。
您可以更改
#define MAX_DOUBLE (std::numeric_limits<double>::max)
到
#define MAX_DOUBLE (std::numeric_limits<double>::max())
答案 1 :(得分:2)
您需要将其定义为:
#define MAX_DOUBLE std::numeric_limits<double>::max()
答案 2 :(得分:0)
std::numeric_limits<double>::max
是全局命名空间中的函数,而不是常量。如果要创建宏,则需要将定义指定为函数标识符
#define MAX_DOUBLE std::numeric_limits<double>::max()
因此,将错误消息指示的MAX_DOUBLE传递给双标识符意味着,使用函数指针初始化double,在这种情况下,其类型为double (*)() noexcept
,导致类型不匹配。
最后,出于实际目的,climits中定义的DBL_MAX
应该符合您的目的,因此您不会经历这种折磨。