gpt4 book ai didi

c++ - std::min 正在重新定义,但如何定义?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:32 24 4
gpt4 key购买 nike

streflop 或 boost 库会更改 std::min 的定义吗?

我有一个使用 g++/make 编译良好的项目,直到我将它与另一个项目的 CMake 构建合并(使用 add_directory)。突然我得到:

no matching function for call to min(double&,float)

它声称错误所在的行号是错误的(它指向源文件的最后一行)但我假设相关代码是这样的:

first = std::min (first, key.mTime);

其中 first 被声明为 double。

“父”项目 (Spring RTS) 使用 boost 和 streflop,但即使在替换了所有包含 <math.h> 之后也是如此与 "streflop_cond.h"在子项目 (assimp) 中,问题仍然存在。

也许是某些编译器标志造成的,我不确定。一个理论将不胜感激。这两个项目的源代码都可以在线获取。

我现在已经在这上面花了将近 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

最佳答案

尝试

std::min<double>(first, key.mTime);

这两个参数似乎具有不同的类型,因此编译器无法将模板参数解析为 std::min

EDIT3:我实际上查看了 assimp 库,从您的错误消息中,ScenePreprocessor.cpp 的第 280 行是问题的原因:

anim->mDuration = last - std::min( first, 0. );

然而,这一行没有任何问题,first 被声明为 double 和 0. 表示零 double 字面量。

我猜想问题出在 STREFLOP 库中,它似乎错误地将 0. 解释为 float 。

关于c++ - std::min 正在重新定义,但如何定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2026305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com