namespace MN{
template<class _Kn> inline const _Kn& max(const _Kn& _M, const _Kn& _N)
{return (_M < _N ? _N : _M); }
}
当我有APP_STL:= stlport_shared时,上面的代码编译得很好但是当我设置APP_STL:= gnustl_shared时,它会失败并显示以下消息。
错误:在第2行的数字常量之前预期','或'...' 在函数'const _Kn&amp; MN :: max(const _Kn&amp;)':错误:'_N'未在此范围内声明。
不是c ++极客,请帮忙
答案 0 :(得分:3)
以_
开头的名称和大写字母保留给编译器,标准库和STL内部详细信息。根据错误消息,看起来gnustl已将_M
定义为一个宏,正在扩展到您不想要的东西。请注意,错误消息中的函数原型缺少第二个参数,该参数暗示预处理器正在将_M
转换为其他参数。
通常,您可以通过从不使用以下划线开头的任何名称来避免这些问题。如果您重命名它们以省略下划线,您应该会看到问题消失。
template<class Kn> inline const Kn& max(const Kn& M, const Kn& N)
{return (M < N ? N : M); }
进一步阅读:What are the rules about using an underscore in a C++ identifier?