我正在使用模板编写浮点比较函数:
template<class T>
static bool AlmostEqual(T f1, T f2)
我的声明如下:
T min_value = std::numeric_limits<T>::min();
由于某种原因,编译器将上面的min视为函数指针并发出错误:
../include/CommonFunctions.h: In static member function ‘static bool CommonFunctions::AlmostEqual(T, T) [with T = double]’:
file.cpp:2200: instantiated from here
../include/CommonFunctions.h:22: error: cannot convert ‘double (*)()throw ()’ to ‘double’ in initialization
静态函数被定义为大程序的一部分。但是,当我将相同的函数放在一个独立的文件中并编译和使用它时,我看到没有错误。我读了其他帖子并试过这样的话:
T min_value(std::numeric_limits<T>::min());
我仍然得到同样的错误,还有一个错误:
../include/CommonFunctions.h:22:53: error: macro "min" requires 2 arguments, but only 1 given
在一个错误中,它能够正确地将min解析为函数,而在另一个错误中,它被视为宏。我不确定,如何解决这个问题。任何指针都会受到赞赏吗?
答案 0 :(得分:3)
对于包括windows.h的人,请将以下内容放在有效的标题中:
#include windows headers ...
pragma push_macro("min")
pragma push_macro("max")
#undef min
#undef max
#include headers expecting std::min/std::max ...
...
pragma pop_macro("min")
pragma pop_macro("max")
在源文件中只有#undef min和max。
#include windows headers ...
#undef min
#undef max
#include headers expecting std::min/std::max ...