“numeric_limits”不是“std”的成员
‘numeric_limits’ is not a member of ‘std’
我正在尝试从源代码 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. Here
is 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>
这证实了问题。这些 header 都没有定义 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 使用 header <limits>
中定义的 std::numeric_limits
,但根据您的说法,它没有包括 header。如果是这种情况,那么这是 sol.hpp 文件中的错误。正确的解决方案是在使用 std::numeric_limits
.
之前通过在该文件中包含 <limits>
来修复 sol.hpp 文件
我正在尝试从源代码 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. Here is 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
.
the sol.hpp file includes the following imports:
#include <stddef.h> #include <limits.h>
这证实了问题。这些 header 都没有定义 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 使用 header <limits>
中定义的 std::numeric_limits
,但根据您的说法,它没有包括 header。如果是这种情况,那么这是 sol.hpp 文件中的错误。正确的解决方案是在使用 std::numeric_limits
.
<limits>
来修复 sol.hpp 文件