std :: min正在重新定义,但是如何?

时间:2010-01-08 08:28:20

标签: c++

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

2 个答案:

答案 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()相关并且期望参数属于同一类型?错误消息表明您将doublefloat放入其中 虽然如果重新定义min(),这不能回答您的问题,但它可能有助于编译问题。