// File test.cpp
#include <my_global.h>
#include <algorithm>
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译:g ++ -c -I/usr/local/mysql/include/mysql/test.cpp,其中/ usr/local/mysql是mysql安装目录.然后编译器报告以下错误:
在/usr/include/c++/4.4/algorithm:61中包含的文件中,来自test.cpp:3:/usr/include/c++/4.4/bits/stl_algobase.h:232:56:错误:宏"min"通过3个参数,但只需2个/usr/include/c++/4.4/bits/stl_algobase.h:253:56:错误:宏"max"传递3个参数,但只包含2个/ usr/include/c ++中包含的文件/4.4/bits/stl_algo.h:61,来自/usr/include/c++/4.4/algorithm:62,来自test.cpp:3:/usr/include/c++/4.4/bits/algorithmfwd.h:353:41 :错误:宏"max"传递3个参数,但只需2个/usr/include/c++/4.4/bits/algorithmfwd.h:364:41:错误:宏"min"传递3个参数,但只需2个文件包含在/usr/include/c++/4.4/algorithm:61中,来自test.cpp:3:/usr/include/c++/4.4/bits/stl_algobase.h:186:错误:在'const'之前预期的unqualified-id/usr/include/c ++/4.4/bits/stl_algobase.h:186:错误:期望')'在'const'之前/usr/include/c++/4.4/bits/stl_algobase.h:186:错误:预期')'之前'const'/usr/include/c++/4.4/bits/stl_algobase.h:186:错误:expec 'const'之前的ted初始化程序/usr/include/c++/4.4/bits/stl_algobase.h:209:错误:'const'之前的预期unqualified-id /usr/include/c++/4.4/bits/stl_algobase.h:209:错误:预期')'在'const'/usr/include/c++/4.4/bits/stl_algobase.h:209:错误:预期')'之前'const'/usr/include/c++/4.4/bits/stl_algobase. h:209:错误:'const'之前的预期初始化程序/usr/include/c++/4.4/bits/stl_algobase.h:232:错误:'std :: min'声明为'inline'变量/ usr/include/c ++ /4.4/bits/stl_algobase.h:232:错误:'const _Tp&std :: min'/usr/include/c++/4.4/bits/stl_algobase.h:235的模板声明:错误:在'之前预期的primary-expression '/usr/include/c++/4.4/bits/stl_algobase.h:235:错误:预期'}'之前'if'/usr/include/c++/4.4/bits/stl_algobase.h:237:错误:预期不合格 - 'return'之前的id /usr/include/c++/4.4/bits/stl_algobase.h:253:错误:'max'声明为'inline'变量/usr/include/c++/4.4/bits/stl_algobase.h:253 :错误:模板声明 'const _Tp&max'/usr/include/c++/4.4/bits/stl_algobase.h:256:错误:在'if'/usr/include/c++/4.4/bits/stl_algobase.h:256之前的预期primary-expression:错误:在'if'之前预期'}'/ usr /include/c++/4.4/bits/stl_algobase.h:258:错误:在'return'之前预期的unqualified-id /usr/include/c++/4.4/bits/stl_algobase. h:259:错误:'}'令牌之前的预期声明
我认为my_global.h和算法之间存在一些名称冲突,所以我将my_global.h包装在命名空间中:
// File test.cpp
namespace MYSQL_NAMESPACE {
#include <my_global.h>
}
#include <algorithm>
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但它没有帮助,编译器仍然报告相同的错误.然后我更改包含顺序如下:
// File test.cpp
#include <algorithm>
#include <my_global.h>
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在一切顺利.
有人真的知道它是什么问题吗?
TKS!
似乎mysql头定义了一个宏min.
#if !defined(max)
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
#endif
Run Code Online (Sandbox Code Playgroud)
这已被MySQL报告为错误28184.该错误被标记为已关闭,因此请尝试更新到最新版本.根据错误页面,它应该在版本5.1.23,版本6.0.4和更新版本中修复.