gpt4 book ai didi

c++ - “numeric_limits”不是 ‘std’ 的成员

转载 作者:行者123 更新时间:2023-12-05 01:52:55 27 4
gpt4 key购买 nike

我正在尝试从源代码编译应用程序,FlyWithLua ,其中包括 sol2 库。

我正在按照说明进行操作,但是当我运行 cmake --build ./build 时,出现以下错误:

In file included from /home/jon/src/FlyWithLua/src/FloatingWindows

/FLWIntegration.cpp:10:
/home/jon/src/FlyWithLua/src/third_party/sol2/./upstream/sol.hpp: In lambda function:
/home/jon/src/FlyWithLua/src/third_party/sol2/./upstream/sol.hpp:7194:59:
error: ‘numeric_limits’ is not a member of ‘std’
7194 | std::size_t space = (std::numeric_limits<std::size_t>::max)();

此后同一行还有其他几个错误,但我想如果我能解决这个错误,它们可能就会消失。

有几个similar issues使用将以下包含添加到 .hpp 文件的解决方案

#include <stdexcept>
#include <limits>

sol.hpp 文件包含以下导入:

#include <stddef.h>
#include <limits.h>

https://sol2.readthedocs.io/en/latest/errors.html给出了一些关于为什么编译器可能无法识别这些包括的提示:

Compiler Errors / Warnings

A myriad of compiler errors can occur when something goes wrong. Hereis some basic advice about working with these types:

If there are a myriad of errors relating to std::index_sequence, type traits, 
and other std:: members, it is likely you have not turned on your C++14 switch for
your compiler. Visual Studio 2015 turns these on by default, but g++ and clang++
do not have them as defaults and you should pass the flag --std=c++1y or
--std=c++14, or similar for your compiler.

src/CMakeList.txt 文件包含以下行:

set(CMAKE_CXX_STANDARD 17)

我对 C/C++ 只是略微熟悉,这一切对我来说似乎非常复杂,但我希望对于更熟练的人来说可能有一个容易识别的原因和解决方案。

cat/etc/*-release 给出

DISTRIB_RELEASE=21.10
DISTRIB_CODENAME=impish
DISTRIB_DESCRIPTION="Ubuntu 21.10"

$ g++ --version
g++ (Ubuntu 11.2.0-7ubuntu2) 11.2.0

最佳答案

/home/jon/src/FlyWithLua/src/third_party/sol2/./upstream/sol.hpp:7194:59:

error: ‘numeric_limits’ is not a member of ‘std’
7194 | std::size_t space = (std::numeric_limits<std::size_t>::max)();

此错误消息暗示 src/third_party/sol2/./upstream/sol.hpp header 使用 std::numeric_limits , 还有 std::numeric_limits没有被定义。最简单的解释是定义 std::numeric_limits 的 header 没有被包括在内。在这种情况下,解决方案是包含定义 std::numeric_limits 的 header 。 .

the sol.hpp file includes the following imports:

#include <stddef.h>
#include <limits.h>

这证实了问题。这些标题都没有定义 std::numeric_limits .

https://sol2.readthedocs.io/en/latest/errors.html gives some hints about the why the compiler might not recognize these includes:

这些提示可能适用于其他一些情况,但不适用于这个。 std::numeric_limits从一开始就是C++标准的一部分,所以语言版本对其存在没有影响。


结论:根据引用的错误信息,sol.hpp使用std::numeric_limits这是在 header 中定义的 <limits> ,但根据您的说法,它不包含该 header 。如果是这种情况,那么这是 sol.hpp 文件中的错误。正确的解决方案是通过包含 <limits> 来修复 sol.hpp 文件在使用 std::numeric_limits 之前在该文件中.

关于c++ - “numeric_limits”不是 ‘std’ 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71296302/

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