error: macro "min" passed 3 arguments, but takes just 2 error: expected ‘)’ before ‘const’ 解决方法

最近在ubuntu下编译一个c++的solution,好几个project都得到如下的奇怪错误:


In file included from /usr/include/c++/4.6/bits/char_traits.h:41:0,
                 from /usr/include/c++/4.6/ios:41,
                 from /usr/include/c++/4.6/istream:40,
                 from /share1/linux_1579/include/ospace/std/istream:13,
                 from /share1/linux_1579/include/ospace/osstd/iterator.h:20,
                 from /share1/linux_1579/include/ospace/osstd/list.h:16,
                 from /share1/linux_1579/include/ospace/std/list:15,
                 from ../../include/LrwVUserVars.h:70,
                 from ../../include/LrwLogicMgrUtil.h:19,
                 from LrwLogicMgrUtil.cpp:6:

/usr/include/c++/4.6/bits/stl_algobase.h:233:56: error: macro "min" passed 3 arguments, but takes just 2

/usr/include/c++/4.6/bits/stl_algobase.h:254:56: error: macro "max" passed 3 arguments, but takes just 2
In file included from /usr/include/c++/4.6/bits/char_traits.h:41:0,
                 from /usr/include/c++/4.6/ios:41,
                 from /usr/include/c++/4.6/istream:40,
                 from /share1/linux_1579/include/ospace/std/istream:13,
                 from /share1/linux_1579/include/ospace/osstd/iterator.h:20,
                 from /share1/linux_1579/include/ospace/osstd/list.h:16,
                 from /share1/linux_1579/include/ospace/std/list:15,
                 from ../../include/LrwVUserVars.h:70,
                 from ../../include/LrwLogicMgrUtil.h:19,
                 from LrwLogicMgrUtil.cpp:6:
/usr/include/c++/4.6/bits/stl_algobase.h:187:5: error: expected unqualified-id before ‘const’
/usr/include/c++/4.6/bits/stl_algobase.h:187:5: error: expected ‘)’ before ‘const’
/usr/include/c++/4.6/bits/stl_algobase.h:187:5: error: expected initializer before ‘const’
/usr/include/c++/4.6/bits/stl_algobase.h:210:5: error: expected unqualified-id before ‘const’
/usr/include/c++/4.6/bits/stl_algobase.h:210:5: error: expected ‘)’ before ‘const’
/usr/include/c++/4.6/bits/stl_algobase.h:210:5: error: expected initializer before ‘const’
/usr/include/c++/4.6/bits/stl_algobase.h:233:5: error: ‘std::min’ declared as an ‘inline’ variable
/usr/include/c++/4.6/bits/stl_algobase.h:233:5: error: template declaration of ‘const _Tp& std::min’
/usr/include/c++/4.6/bits/stl_algobase.h:236:7: error: expected primary-expression before ‘if’
/usr/include/c++/4.6/bits/stl_algobase.h:236:7: error: expected ‘}’ before ‘if’
/usr/include/c++/4.6/bits/stl_algobase.h:238:7: error: expected unqualified-id before ‘return’
/usr/include/c++/4.6/bits/stl_algobase.h:254:5: error: ‘max’ declared as an ‘inline’ variable
/usr/include/c++/4.6/bits/stl_algobase.h:254:5: error: template declaration of ‘const _Tp& max’
/usr/include/c++/4.6/bits/stl_algobase.h:257:7: error: expected primary-expression before ‘if’
/usr/include/c++/4.6/bits/stl_algobase.h:257:7: error: expected ‘}’ before ‘if’
/usr/include/c++/4.6/bits/stl_algobase.h:259:7: error: expected unqualified-id before ‘return’

/usr/include/c++/4.6/bits/stl_algobase.h:260:5: error: expected declaration before ‘}’ token


花了很多时间都没有找到解决方法。终于在网上找到一点线索,然后一点一点试找到了一个workaround。其实这个错误与代码本身或g++版本无关,只是因为出现了宏定义冲突:

所以只需把属于自己定义的相关头文件(比如上面的LrwVUserVars.h)中加入(最好加在自己的头文件引用和标准头文件的引用之间):

#include "LrwDomBase.h"
#include "LrwPostId.h"

//added by andy

#undef max
#undef min


#include <map>
#include <queue>

则这个问题就不会再出现了。


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值