如何引入<numbers>头文件使用std::numbers及GCC编译报错排查
C++ std::numbers相关问题解决指南
基础属性说明
std::numbers是C20标准新增的数学常量集合,属于标准头文件<numbers>的内容,并非模块,只要正确引入头文件并开启C20编译支持即可使用,gcc 11.1.0版本完全支持该特性。
各类报错原因及修复方案
1. std::numbers未声明报错
该报错的核心原因是编译命令参数错误,未正确开启C++20支持:
- 最初执行的
g++ randomCodeWhileReading.cpp -o main-std=c++20命令缺少空格,-o后的输出文件名和-std=c++20参数连在一起,等同于将输出文件命名为main-std=c++20,实际没有开启C++20标准支持 - 后续使用
gcc ex2_03.cpp -o -std=c++20编译的问题更多:一是用gcc编译C代码不会自动链接C标准库,二是-o参数后直接跟了-std=c++20,既没有指定要编译的源文件,也没有正确开启C++20支持
修复方法:使用正确的编译命令,确保-std=c++20参数独立存在:g++ 你的源文件名.cpp -o 输出可执行文件名 -std=c++20
2. 编译提示no input files报错
执行的g++ -g -Wall -pedantic -std=c++2a -o randomCodeWhileReading.cpp命令中,-o参数的作用是指定输出的可执行文件名,将源文件名放在-o之后,等同于告诉编译器输出文件名为randomCodeWhileReading.cpp,没有传入要编译的源文件,因此报错。
3. 编译成功后找不到输出结果
使用正确命令g++ randomCodeWhileReading.cpp -o main -std=c++20编译成功后,当前目录会生成名为main的可执行文件,执行以下命令即可运行程序看到输出:./main
4. 源文件丢失问题
执行错误编译命令时,将源文件名放在了-o参数之后,编译器会直接用生成的输出内容覆盖原有的源文件,导致源文件被清空/删除,后续编译自然找不到对应文件。后续操作切记不要把.cpp后缀的源文件路径放在-o参数之后。
内容的提问来源于stack exchange,提问作者ExZerminator
相关产品推荐
相关产品推荐

