【发布时间】:2021-11-25 06:57:48
【问题描述】:
在 11.1.0 版的 gcc 和 g++ 上运行。每次我运行这段代码时都会遇到问题,它说 std::numbers 没有声明。我尝试在我的终端中运行g++ randomCodeWhileReading.cpp -o main-std=c++20(我正在运行 ubuntu linux),但仍然没有任何变化。这是有问题的代码:
#include <iostream>
#include <numbers>
int main()
{
const long double pi {0};
const long double pi2 {0};
pi = std::numbers::pi_v<long double>;
pi2 = std::numbers::pi_v<long double>;
std::cout << pi << std::endl << pi2;
}
只是想看看数字模块的实际运行情况。 (它甚至被称为模块还是头文件?)
21 年 10 月 6 日编辑:
修改常量变量已得到修复。但是,此代码仍然无法在我的计算机上运行。也就是说,#include <numbers> 似乎在我的机器上不起作用,即使使用-std=c++20 也会引发错误。我正在运行 gcc 和 g++ 版本 11.1 请参阅以下错误:
gcc ex2_03.cpp -o -std=c++20
ex2_03.cpp: In function ‘int main()’:
ex2_03.cpp:22:65: error: ‘std::numbers’ has not been declared
22 | const double pond_diameter {2.0 * std::sqrt(pond_area/ std::numbers::pi)}; //find diameter by finding radius & multiplying by 2
|
但是我无法使用godbolt.org 进行复制(类似的程序不一样,但也可以使用)。显然,这似乎是我的机器的问题。我该如何解决这个问题?
21 年 10 月 8 日编辑: 我使用更多标志再次运行代码并将 -std=c++20 更改为 -std=c++2a 这就是返回的内容:
chris@chris-Aspire-E5-576G:~/Desktop/programming/c++/Learning$ ls
ex2_02 HelloWorld randomCodeWhileReading textbookExample1
ex2_02.cpp HelloWorld.cpp randomCodeWhileReading.cpp textbookExample1.cpp
ex2_02.o HelloWorld.o randomCodeWhileReading.o textbookExample1.o
ex2_03 main textbookDebug textbookOutputNameAndAge.cpp
ex2_03.cpp outputNameAndAge textbookDebug.cpp
ex2_03.o outputNameAndAge.o textbookDebug.o
chris@chris-Aspire-E5-576G:~/Desktop/programming/c++/Learning$ g++ -g -Wall -pedantic -std=c++2a -o randomCodeWhileReading.cpp
g++: fatal error: no input files
compilation terminated.
添加了 ls 输出以显示我在正确的目录中。
编辑 10/8/21 v2: 我使用了以下命令,没有收到错误。
g++ randomCodeWhileReading.cpp -o main -std=c++20
现在只是混淆了输出的去向。根据@nate 的回复,我认为它已发送到 main?只是想看看使用std::numbers::pi的cout
编辑 10/8/21 v3:
使用./main可以运行所有清晰的nate解释程序
编辑 10/8/21 v4: ...我重复了之前的命令并得到了一个错误:
g++ randomCodeWhileReading.cpp -o main -std=c++20
cc1plus: fatal error: randomCodeWhileReading.cpp: No such file or directory
compilation terminated.
有人能解释一下这次出了什么问题吗? (我还在同一个目录中)。使用ls之后好像文件已经不在目录下好像被删除了?
编辑 10/8/21 v5: 我认为当我向朋友解释错误以及我运行命令的错误方式时,该文件被删除了大声笑。一切都好:D!
【问题讨论】:
-
-o main和-std=c++20之间应该有一个空格。这真的是你的命令行,还是抄错了? -
这里工作正常(删除
const后):godbolt.org/z/65obeK4MP -
这个问题是重复的:How to reinstall gcc and g++ on ubuntu linux,我们仍然需要知道 1) EXACT 错误(复制/粘贴 ACTUAL 文本消息 - 不要给我们“摘要”!),2 ) 你的 g++ 版本,3) 你的 EXACT g++ 命令行。看看你的帖子:你在上面一起运行了“main-std=c++20”。那是错字吗?还是您的实际命令?请Edit您的帖子并提供此信息。
-
不,你的命令行还是错的。
-o之后的下一个参数始终被视为输出文件(可执行文件)的名称,而不是作为选项。使用您的原始命令,它将输出写入名为main-std=c++20的文件,而不是将-std=c++20作为选项。使用您的新命令,它会将输出写入名为-std=c++20的文件,但仍不将其视为选项。如果你检查你的目录,你会看到很多奇怪命名的文件。试试g++ ex2_03.cpp -o main -std=c++20。粘贴它,包括所有空格。 -
@ExZerminator: 1) 感谢您更新您的帖子。拥有确切的信息对于解决问题至关重要。2) 我无法重现 .... 因为我手边没有 g++ 10 或 11 编译器。我现在正在安装一个。 3) 请不要急于下结论“您的安装有问题”。 4) 请务必修复您的命令行(根据 Nate Eldredge)和Edit 您的帖子以及结果。
标签: c++ gcc g++ codeblocks c++20