template <class T>
struct scalar_log_minimum {
public:
typedef T value_type;
typedef T result_type;
static
result_type initial_value(){
return std::log(std::numeric_limits<result_type>::max());
}
static
void update(result_type& t, const value_type& x){
if ( (x>0) && (std::log(x)<t) ) t = std::log(x);
}
};
Run Code Online (Sandbox Code Playgroud)
我在尝试编译上面时遇到以下错误:
functional_ext.hpp:55:59:宏"max"需要2个参数,但只有1个给定
max不是宏,对吧?那么这个错误是什么?顺便说一下,我正在使用visual studio 2005
55:59 --- 55是59号线?
你包含一个头文件的地方,#defineš max宏.最好的解决方案是弄清楚它的定义位置,并在可能的情况下禁止定义它.或者,你可以#undef这样:
#include <evil_header_which_defines_max.h>
#undef max
Run Code Online (Sandbox Code Playgroud)
我发现一旦包含windows.h,您遇到的许多#define非常令人不安(不仅是max和min,而且如果我没记错的话,我还会遇到其他通用单词(如Rectangle)的问题)。因此,我养成了仅在绝对必要时才包含windows.h的习惯,而从来没有在头文件中包含它。这样可以减少针对特定平台的少量C ++文件的痛苦。
不幸的是,一些Boost库(我相信线程和asio)的标头中确实包含windows.h,但我仍然时常遇到这种愚蠢的问题。
对于其余导致问题的情况,我的解决方案是在包含头文件后#undef有问题的符号。