c++ - 为什么 GSL-Lite 试图包含?
问题描述
我正在尝试在我的嵌入式 STM32 Keil 项目中使用 gsl。我的 Keil 项目最多使用过时的 semi c++11 编译器。(这是我的 ST 库为 LoRaWAN 设置的约束)。我正在使用 keil 捆绑的 V5.06 update 6 (build 750) ARM Compiler。Keil 选择不实施std::aray
STL。我对此感到非常失望,但是我能做些什么。
我选择使用gsl-Lite。它应该是兼容的C++98
。C++03
所以std::array
不需要,但是当我尝试使用包含在我的包含路径中的库来编译我的代码时,我收到了这个构建消息:
..\Core\inc\gsl/gsl-lite.hpp(405): error: #5: cannot open source input file "array": No such file or directory
# include <array>
但是第 404 行以这段代码开头:
#if gsl_HAVE( ARRAY )
# include <array>
#endif
在我看来,他们正在尝试确定是否<array>
可以包括在内。我的编辑器将此块变灰,就好像它没有被定义一样。
gsl_HAVE
定义为:
#define gsl_HAVE( feature ) ( gsl_HAVE_##feature )
我不明白这是如何工作的,以及如何检查是否ARRAY
未正确定义。
我不想不包含<array>
,所以我的代码可以构建和使用 gsl-lite。我的首选选项是带有定义的东西。
更新
据我了解包含系统:
#define gsl_HAVE_ARRAY gsl_CPP11_110
被定义为自动排除一个特征(gsl_HAVE_ARRAY
在这种情况下),当
#define gsl_CPP11_OR_GREATER ( gsl_CPLUSPLUS >= 201103L )
被评估为真实。gsl_CPLUSPLUS
定义为
# define gsl_CPLUSPLUS __cplusplus
但我似乎无法弄清楚__cplusplus
.
解决方案
我认为我的问题是它_cplusplus
没有任何价值,因为 keil 没有添加它。即使我声明它不起作用,因为编译器不能gsl_CPLUSPLUS
,因为它需要一个裸指针。199711L
delete
gsl::owner<int *>
似乎编译器太旧而无法处理 gsl。
推荐阅读
- laravel - 中间件中的 Null Auth 用户
- outlook-redemption - 读取创建日期和接收日期的兑换错误
- python - 如何在谷歌云调度程序(Python)中定义的谷歌云函数中使用主体参数?
- arrays - 跨 MS Excel 工作表的 if 语句
- recaptcha - 如何修复未捕获的错误:站点密钥无效或未从 reCaptcha 加载到 api.js 中
- reactjs - 如何在 React Native 中仅使用 FlatList 或 VirtualizedList 渲染第一项
- typescript - 基于嵌套属性创建联合类型
- jmeter - JMeter - 从单个控制台执行多个测试计划
- hibernate - JoinColumn 注释在同一张表上创建列
- python - 获取python子进程运行时间