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

来源:互联网 发布:如何申请淘宝图片保护 编辑:程序博客网 时间:2024/06/06 03:17

最近在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>

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


原创粉丝点击