c++ - 如何在 Oct 文件中使用 C++17 功能
问题描述
我正在尝试std::optional
在 GNU Octave 的 Oct 文件中使用(C++17 功能)。我已升级到 g++ 版本 9.1.0 并将 linux 环境变量 'CC' 和 'CXX' 分别设置为/usr/bin/gcc
和/usr/bin/g++
。在 Octave 中运行getenv
这些变量表明设置了正确的编译器。但是,在运行“mkoctfile”时,出现以下错误:
oct_interface.cpp: In function ‘octave_value_list Fmibc(const octave_value_list&, int)’:
oct_interface.cpp:863:10: error: ‘optional’ is not a member of ‘std’
863 | std::optional<double> dub_opt = {};
| ^~~~~~~~
oct_interface.cpp:863:10: note: ‘std::optional’ is only available from C++17 onwards
oct_interface.cpp:863:19: error: expected primary-expression before ‘double’
863 | std::optional<double> dub_opt = {};
| ^~~~~~
warning: mkoctfile: building exited with failure status
正如评论中所指出的,必须将适当的标志传递给编译器才能使用 C++17 功能。因此,一个更精确的问题可能是如何配置mkoctfile
以将-std=c++17
标志传递给编译器。
解决方案
问题是 C++17 标志没有被传递给编译器,正如 Human-Compiler 在评论中指出的那样。编译器标志可以通过两种方式传递:作为调用 Oct-file 实用程序的一部分,即mkoctfile -std=c++17
,或通过设置 Octave 环境变量,即setenv("CXXFLAGS", "-std=c++17")
推荐阅读
- java - 添加形状超链接后无法读取代码 Excel 2010
- bash - 如何将周数和工作日转换为日期
- laravel - 如何检索提供的 ID 的倒数第二行
- javascript - 浏览器事件循环如何处理宏任务?
- java - Array.toString 返回内存地址,而不是实际值
- angular5 - 如何减少使用 *ngFor 结构指令在表中显示列表(从数据库中获取的 json 对象)的时间?
- android-studio - Android Studio 3.3 xml 在 LinearLayout 上预览内部阴影
- scalability - AKF 比例立方体替代品?
- testing - 如何将测试用例/需求套件从其他测试计划添加到新的测试计划并删除它们而不删除原始
- join - KDB 如何连接具有不同列名的表