// File test.cpp
#include <my_global.h>
#include <algorithm>
int main()
{
return 0;
}
使用以下命令编译: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中,错误:宏“min”传递了3个参数,但只使用了2个。 在 /usr/include/c++/4.4/bits/stl_algobase.h:253中,错误:宏“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中,错误:宏“max”传递了3个参数,但只使用了2个。 在 /usr/include/c++/4.4/bits/algorithmfwd.h:364中,错误:宏“min”传递了3个参数,但只使用了2个。 从 /usr/include/c++/4.4/algorithm:61中包含文件,从test.cpp:3开始: 在 /usr/include/c++/4.4/bits/stl_algobase.h:186中,错误:在常量之前期望未限定的标识符。 在 /usr/include/c++/4.4/bits/stl_algobase.h:186中,错误:在常量之前期望“)”。 在 /usr/include/c++/4.4/bits/stl_algobase.h:186中,错误:在常量之前期望“)”。 在 /usr/include/c++/4.4/bits/stl_algobase.h:186中,错误:在常量之前期望初始化程序。 在 /usr/include/c++/4.4/bits/stl_algobase.h:209中,错误:在常量之前期望未限定的标识符。 在 /usr/include/c++/4.4/bits/stl_algobase.h:209中,错误:在常量之前期望“)”。 在 /usr/include/c++/4.4/bits/stl_algobase.h:209中,错误:在常量之前期望“)”。 在 /usr/include/c++/4.4/bits/stl_algobase.h:209中,错误:在常量之前期望初始化程序。 在 /usr/include/c++/4.4/bits/stl_algobase.h:232中,错误:“std :: min”声明为内联变量。 在 /usr/include/c++/4.4/bits/stl_algobase.h:232中,错误:template declaration of 'const _Tp& std::min'。 在 /usr/include/c++/4.4/bits/stl_algobase.h:235中,错误:期望主表达式之前的内容“if”。 在 /usr/include/c++/4.4/bits/stl_algobase.h:235中,错误:期望在“if”之前的“}”。 在 /usr/include/c++/4.4/bits/stl_algobase.h:237中,错误:在未限定的标识符之前期望声明“return”。 在 /usr/include/c++/4.4/bits/stl_algobase.h:253中,错误:“max”声明为内联变量。 在 /usr/include/c++/4.4/bits/stl_algobase.h:253中,错误:template declaration of 'const _Tp& max'。 在 /usr/include/c++/4.4/bits/stl_algobase.h:256中,错误:期望主表达式之前的内容“if”。 在 /usr/include/c++/4.4/bits/stl_algobase.h:256中,错误:期望在“if”之前的“}”。 在 /usr/include/c++/4.4/bits/stl_algobase.h:258中,错误:在未限定的标识符之前期望声明“return”。 在 /usr/include/c++/4.4/bits/stl_algobase.h:259中,错误:在'}'标记之前期望声明。我认为在my_global.h和algorithm之间存在名称冲突,因此我将my_global.h放入了一个命名空间中:
// File test.cpp
namespace MYSQL_NAMESPACE {
#include <my_global.h>
}
#include <algorithm>
int main()
{
return 0;
}
但是这并没有帮助,编译器仍然报告相同的错误。然后我按照以下顺序更改了包含顺序:
// File test.cpp
#include <algorithm>
#include <my_global.h>
int main()
{
return 0;
}
现在一切都很顺利。
有人真的知道问题是什么吗?
谢谢!
windows.h
也有这个问题 - 您可以使用宏NOMINMAX
关闭min
和max
的定义) - Billy ONeal