iNum = std::min((size_t)iNum,prop->mDataLength / sizeof(Type)); 报错

前言

           在使用assimp库是,有时会报错:

iNum = std::min((size_t)iNum,prop->mDataLength / sizeof(Type)); 报错_openGL

发现实际错误定位在:assimp/material.inl  文件夹

iNum = std::min((size_t)iNum,prop->mDataLength / sizeof(Type)); 报错_解决方法_02

 

​VS2017使用assimp 5.0.0 error C2589: '(' : illegal token on right side of '::' 解决办法​

坑爹微软Sucks Again.

assimp 终于更新到了5.0.0并且支持GLTF2格式,包含动画正确解析,在viewer中也能看到正确结果,真他喵的不容易,然后拿来编译完到自己项目里用,就出这玩意了,神奇的是编译他自己的viewer就没问题?

不管那么多,百度一下说是std::min之类的问题,解决办法


5,6年前就听说不要用std::min,max做跨平台的东西,再之前编译PBRT源码std::min也有类似问题,自己用的话一定要自己写一套,绝对不能用cpp标准的,因为微软总会时不时的恶心你一下,让标准不标准。

解决方法,简单粗暴把

iNum = std::min((size_t)iNum, prop->mDataLength / sizeof(Type));

换成

iNum = std::min<size_t>((size_t)iNum, prop->mDataLength / sizeof(Type));

参考

​参考网站​