我正在尝试在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>’
解决问题,我在我们自己的一个头文件中遇到了这段代码,我认为这与此问题有关:
#if defined(IRIX) | linux
signed max(signed a, signed b);
long max(long a, long b);
double max(double a, double b);
float max(float a, float b);
signed min(signed a, signed b);
long min(long a, long b);
double min(double a, double b);
#define __min min
#define __max max
float min(float a, float b);
#endif
在许多其他地方,我看到调用带有两个参数的__max()
函数。
我有根据的猜测是,我可以通过调用__max()
替换所有这些std::max()
的来电,并且我应该包含<algorithm>
标题。
我的两个问题是:
答案 0 :(得分:0)
在bits/stl_bvector.h
的第685行,你有:
__gnu_cxx::__numeric_traits<difference_type>::__max
你丑陋的宏正在用__max
替换max
,因此错误。
您可以通过__max
有效地替换代码中的所有std::max
,但为了确保不删除所有内容,您可以先__max
重新命名__my__max
,只是为了确定(在你的宏中)。这样你就可以继续使用自定义的最小/最大函数。
在包含stl标头并重新启用它之前,另一个解决方案是undef
你的宏。