传统C+中的最小值和最大值+; 我试图在Debian GNU/Linux稳定系统上编译一些旧的C++代码(可能来自2001-2002年)。编译时,我得到一个错误: In file included from /usr/include/c++/4.7/vector:66:0, from ../FooMath/FooBar.h:23, from FooBar.cpp:2: /usr/include/c++/4.7/bits/stl_bvector.h: In member function ‘std::vector<bool, _Alloc>::size_type std::vector<bool, _Alloc>::max_size() const’: /usr/include/c++/4.7/bits/stl_bvector.h:685:2: error: ‘max’ is not a member of ‘__gnu_cxx::__numeric_traits<long int>’

传统C+中的最小值和最大值+; 我试图在Debian GNU/Linux稳定系统上编译一些旧的C++代码(可能来自2001-2002年)。编译时,我得到一个错误: In file included from /usr/include/c++/4.7/vector:66:0, from ../FooMath/FooBar.h:23, from FooBar.cpp:2: /usr/include/c++/4.7/bits/stl_bvector.h: In member function ‘std::vector<bool, _Alloc>::size_type std::vector<bool, _Alloc>::max_size() const’: /usr/include/c++/4.7/bits/stl_bvector.h:685:2: error: ‘max’ is not a member of ‘__gnu_cxx::__numeric_traits<long int>’,c++,linux,algorithm,max,min,C++,Linux,Algorithm,Max,Min,在许多其他地方,我看到对带有两个参数的\uu max()函数的调用 我有经验的猜测是,我可以用对std::max()的调用替换所有这些对\uu max()的调用,并且我应该包含头 我的两个问题是: 我的猜测正确吗? 我假设min和max的额外声明和定义是历史遗留下来的。有人知道它的历史吗?为什么需要这个代码? 在bits/stl_bvector.h中的第685行,您有: __gnu_cxx::__numeric_traits<difference_type>::__max

在许多其他地方,我看到对带有两个参数的
\uu max()
函数的调用

我有经验的猜测是,我可以用对
std::max()
的调用替换所有这些对
\uu max()
的调用,并且我应该包含

我的两个问题是:

  • 我的猜测正确吗?
  • 我假设min和max的额外声明和定义是历史遗留下来的。有人知道它的历史吗?为什么需要这个代码?
    在bits/stl_bvector.h中的第685行,您有:

        __gnu_cxx::__numeric_traits<difference_type>::__max
    
    \uuuu gnu cxx::\uu数字特征::\uu最大值
    
    您的丑陋宏正在将
    \uu max
    替换为
    max
    ,因此出现错误

    您可以用
    std::max
    有效地替换代码中的所有
    \uu max
    ,但为了确保不拆下所有内容,您可以先用
    \uu my\uu max
    重命名
    \uu max
    ,以确保(也在宏中)。这样,您将继续使用自定义的最小/最大函数



    另一种解决方案是在包含stl头之前取消定义宏,然后在包含stl头之后重新启用宏。

    从错误消息中,
    max
    似乎与来自算法的宏无关。您应该发布MCVE。最可能的解释是您的代码中存在错误。我希望您不要编辑系统标题。以双下划线开头的标识符保留给实现。将代码中的所有双下划线替换为单下划线或其他内容。是否在代码中的任何位置的标准库头文件之前包含自己的头文件?问题是,我们不知道丑陋的宏是否在标准库实现文件中。问题中没有足够的信息。是的,你是对的,“某个头文件”没有那么清楚。“某个头文件”实际上是我们自己的头文件之一,而不是系统头文件。我在问题中改变了这一点,tnx。
        __gnu_cxx::__numeric_traits<difference_type>::__max