‘numeric_limits’ 不是 ‘std’ 的成员
2022-2-28 14:52:6
收藏:0
阅读:1385
评论:1
我试图从源代码编译 FlyWithLua 应用程序,其中包括 sol2 库。
我按照说明进行操作,但当我运行 cmake --build ./build
时,我遇到以下错误:
在文件 /home/jon/src/FlyWithLua/src/FloatingWindows
/FLWIntegration.cpp:10 中包含;
/home/jon/src/FlyWithLua/src/third_party/sol2/./upstream/sol.hpp:在 lambda 函数中:
/home/jon/src/FlyWithLua/src/third_party/sol2/./upstream/sol.hpp:7194:59:
error: ‘numeric_limits’ 不是 ‘std’ 的成员
7194 | std::size_t space = (std::numeric_limits<std::size_t>::max)();
在此之后同一行上有几个其他错误,但我想解决这个错误,其余错误可能会消失。
有几个 类似的问题,解决方法是将以下包括添加到 .hpp 文件中
#include <stdexcept>
#include <limits>
sol.hpp
文件包括以下导入项:
#include <stddef.h>
#include <limits.h>
https://sol2.readthedocs.io/en/latest/errors.html 提供了有关为什么编译器可能无法识别这些包括的一些提示:
编译器错误/警告
当出现问题时可能会出现许多编译器错误。下面是一些有关处理这些类型的基本建议:
如果出现了许多与 std::index_sequence、类型 traits 等 std:: 成员有关的错误,很可能是您没有为编译器打开 C++14 开关。Visual Studio 2015 默认打开这些开关,但 g++ 和 clang++ 没有默认值,您应该为编译器传递 -std=c++1y 或 -std=c++14(或类似的),以便打开这些开关。
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
原文链接 https://stackoverflow.com/questions/71296302
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
- 如何创建一个 lua 脚本以针对特定键为 fluentbit 进行限流
- 如何在Lua中将变量从Lua推送到C ++
这个错误信息表明
src/third_party/sol2/./upstream/sol.hpp
头文件使用了std::numeric_limits
,但也意味着std::numeric_limits
没有被定义。最简单的解释是定义std::numeric_limits
的头文件没有被引入。在这种情况下,解决方法就是在使用std::numeric_limits
前,将定义std::numeric_limits
的头文件包含进来。sol.hpp 文件包含以下的导入语句:
#include <stddef.h> #include <limits.h>
这证实了问题所在。这两个头文件都没有定义
std::numeric_limits
。https://sol2.readthedocs.io/en/latest/errors.html 提供了一些关于为何编译器不能识别这些引入文件的提示:
这些提示可能适用于其他情况,但不适用于这一情况。
std::numeric_limits
从一开始就是 C++ 标准的一部分,所以语言版本对其存在性没有影响。综上:根据引用的错误信息,sol.hpp文件使用了
std::numeric_limits
,而这个函数在头文件<limits>
中定义。但据你所说,在使用std::numeric_limits
之前没有将这个头文件引入。如果情况就是这样,那么sol.hpp文件就有问题。正确的解决方案是在使用std::numeric_limits
之前,先在sol.hpp文件中包含<limits>
头文件。