宏"max"需要2个参数,但只有1个参数

6 visual-studio visual-c++

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号线?

Ada*_*eld 7

你包含一个头文件的地方,#defineš max宏.最好的解决方案是弄清楚它的定义位置,并在可能的情况下禁止定义它.或者,你可以#undef这样:

#include <evil_header_which_defines_max.h>
#undef max
Run Code Online (Sandbox Code Playgroud)


use*_*875 6

我发现一旦包含windows.h,您遇到的许多#define非常令人不安(不仅是max和min,而且如果我没记错的话,我还会遇到其他通用单词(如Rectangle)的问题)。因此,我养成了仅在绝对必要时才包含windows.h的习惯,而从来没有在头文件中包含它。这样可以减少针对特定平台的少量C ++文件的痛苦。

不幸的是,一些Boost库(我相信线程和asio)的标头中确实包含windows.h,但我仍然时常遇到这种愚蠢的问题。

对于其余导致问题的情况,我的解决方案是在包含头文件后#undef有问题的符号。