warning C4003: “max”宏的实参不足

下载pdfium编译成功后,想在一mfc单文档里面引用,

报错:1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(154): warning C4003: “max”宏的实参不足

...

1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error C2589: “(”:“::”右边的非法标记

1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error C2059: 语法错误:“::”
1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error C2143: 语法错误 : 缺少“(”(在“::”的前面)
1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error C2059: 语法错误:“)”

源代码:safe_conversions_impl.h

template <typename Dst, typename Src>
struct DstRangeRelationToSrcRangeImpl<Dst,
                                      Src,
                                      INTEGER_REPRESENTATION_SIGNED,
                                      INTEGER_REPRESENTATION_SIGNED,
                                      NUMERIC_RANGE_NOT_CONTAINED> {
  static RangeConstraint Check(Src value) {

    return std::numeric_limits<Dst>::is_iec559
        ? GetRangeConstraint(value <= std::numeric_limits<Dst>::max(),
                                    value >= -std::numeric_limits<Dst>::max())
               : GetRangeConstraint(value <= std::numeric_limits<Dst>::max(),
                                    value >= std::numeric_limits<Dst>::min());
  }
};

原因:

因为Windef.h中定义了
#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif

vc的max宏和std::numeric_limits<>max()函数冲突

解决:1.把std::numeric_limits<>max()用括号括起来避免和windows定义的宏混淆,例如(std::numeric_limits<Dst>::max)()

2.为了解决这个问题,Visual C++ 定义了另外两个功能相同的模板:_cpp_min() 和 _cpp_max()。我们可以用它们来代替std::min() 和 std::max()(未验证)

参考:http://blog.chinaunix.net/uid-17102734-id-2830143.html

http://blog.csdn.net/xidianzhimeng/article/details/21181279

http://blog.163.com/fleeting_ash/blog/static/663410862009310113424930/


你可能感兴趣的:(error,warning,max宏的实参不足,C4003,C2589,右边的非法标记,numeric_limits)