名字空间导致的编译错误


如下图所示,在小熊猫C++开发环境下,第30行代码产生编译错误。原因是:C++ 本来已经定义了std::max() 函数,用户又自己定义了max函数,二者函数名相同,用户到底想调用哪个max函数有歧义。此种情况,小熊猫C++开发环境会报错,即如图所示;而VS2015编译环境不会报错(它默认用户调用的是自己定义的max函数)。

为去除二义性,只需将第30行代码改成:

cout << ::max(v.Begin(), v.End(), MyCriterion())->sal << endl;

即可。