下载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());
}
};
原因:
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/