streflop或boost库是否会改变std :: min的定义?
我有一个用g ++ / make编译好的项目UNTIL我将它与另一个项目的CMake构建合并(使用add_directory)。我突然得到了:
no matching function for call to min(double&,float)
它声称错误的行号是错误的(它指向源文件的最后一行)但是我将假设相关的代码是这样的:
first = std::min (first, key.mTime);
首先声明为双倍。
'parent'项目(Spring RTS)使用boost和streflop,但即使在子项目(assimp)中用<math.h>
替换"streflop_cond.h"
的所有包含,问题仍然存在。
也许有些编译器标志是负责任的,我不确定。一个理论将不胜感激。两个项目的来源均可在线获取。
我现在花了将近7个小时,而且我似乎没有接近解决方案。
完整的错误和构建标志是:
[ 61%] Building CXX object rts/lib/assimp/code/CMakeFiles/assimp.dir/ScenePreprocessor.cpp.o
cd /mnt/work/workspace/spring-patch-git/linux/build/rts/lib/assimp/code && /usr/bin/g++ -Dassimp_EXPORTS -DSYNCCHECK -DNO_AVI -DSPRING_DATADIR=\"/usr/local/share/games/spring\" -DSTREFLOP_SSE -DASSIMP_BUILD_DLL_EXPORT -msse -mfpmath=sse -fsingle-precision-constant -frounding-math -mieee-fp -pipe -fno-strict-aliasing -fvisibility=hidden -fvisibility-inlines-hidden -pthread -O0 -Wall -Wno-sign-compare -DDEBUG -D_DEBUG -DNO_CATCH_EXCEPTIONS -gstabs -fPIC -I/mnt/work/workspace/spring-patch-git/spring/rts/System -I/mnt/work/workspace/spring-patch-git/spring/rts/lib/lua/include -I/mnt/work/workspace/spring-patch-git/spring/rts/lib/streflop -I/usr/include/SDL -I/usr/include/boost-1_39 -I/mnt/work/workspace/spring-patch-git/spring/rts -I/usr/include/AL -I/usr/include/freetype2 -I/mnt/work/workspace/spring-patch-git/spring/rts/lib/assimp/include -I/mnt/work/workspace/spring-patch-git/spring/rts/lib/assimp/../streflop -o CMakeFiles/assimp.dir/ScenePreprocessor.cpp.o -c /mnt/work/workspace/spring-patch-git/spring/rts/lib/assimp/code/ScenePreprocessor.cpp
/mnt/work/workspace/spring-patch-git/spring/rts/lib/assimp/code/ScenePreprocessor.cpp: In member function void Assimp::ScenePreprocessor::ProcessAnimation(aiAnimation*):
/mnt/work/workspace/spring-patch-git/spring/rts/lib/assimp/code/ScenePreprocessor.cpp:280: error: no matching function for call to min(double&, float)
make[2]: *** [rts/lib/assimp/code/CMakeFiles/assimp.dir/ScenePreprocessor.cpp.o] Error 1
答案 0 :(得分:7)
尝试
std::min<double>(first, key.mTime);
这两个参数似乎有不同的类型,因此编译器无法将模板参数解析为std::min
EDIT3:我实际上看了一下assimp库,并且从你的错误消息中,ScenePreprocessor.cpp
的第280行导致了这些问题:
anim->mDuration = last - std::min( first, 0. );
此行没有任何问题,但first
声明为双精度,0.
表示零双精简版。
我猜测问题出在STREFLOP库中,似乎错误地将0.
解释为浮点文字。
答案 1 :(得分:0)
此错误是否可能与作为模板的min()
相关并且期望参数属于同一类型?错误消息表明您将double
和float
放入其中
虽然如果重新定义min()
,这不能回答您的问题,但它可能有助于编译问题。