visual-studio - C 错误 - 宏 "max"需要 2 个参数,但只给出 1 个

标签 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);
        }
    };

我收到以下错误:

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/

相关文章:

c++ - 为什么比较 double 和 float 会导致意想不到的结果?

visual-studio-2010 - 如何在 Opencv 中使用 Cv Rect 裁剪图像。

c++ - 是什么导致 WS_TABSTOP 影响窗口绘制顺序?

c++ - 如何在宏 C++ 中使用 cout

c# - 使用 xampp 的 C# 中的 MySql 错误 1064

c++ - Visual Studio 中的 Cuda 并行代码生成

C++无法根据STL容器类型进行流控

c++ - 转换运算符重载歧义,编译器不同

.net - 如何在不依赖 .NET 4 SDK DLL/库文件的 visual studio 2010 中构建可执行文件?

c++ - 共享内存大小计算c++