尝试编译以下代码时:
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);
}
};
我收到以下错误:
function_ext.hpp:55:59:宏“max”需要 2 个参数,但只给出 1 个
这里的“max”不是宏,对吧?那么这个错误是什么呢?顺便说一句,我正在使用 Visual Studio 2005。
55:59 是什么意思 - 55 是行号 59?
最佳答案
我发现在包含 windows.h 后遇到的许多 #define 非常令人不安(不仅是 max 和 min,而且如果我没记错的话,我对其他通用词(如 Rectangle)也遇到了问题)。因此,我养成了只在绝对必要时才包含 windows.h 的习惯,而不是在头文件中。这减少了少量特定于平台的 C++ 文件的麻烦。
不幸的是,一些boost库(我相信thread和asio)确实在它们的头文件中包含了windows.h,而且我仍然时不时地遇到这种愚蠢的问题。
对于导致问题的其余情况,我的解决方案是在包含头文件后 #undef 有问题的符号。
关于visual-studio - C 错误 - 宏 "max"需要 2 个参数,但只给出 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/518517/