在gcc和g++的版本11.1.0上运行。每次我运行这段代码时都会遇到问题,它说std::numbers没有声明。我尝试在我的终端中运行g++ randomCodeWhileReading.cpp -o main-std=c++20
(im运行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;
}
字符串
只是想看看numbers模块的运行情况。(它到底是被称为模块还是头文件?)
编辑10/6/21:修改一个常量变量已经被修复。然而,这段代码仍然不会在我的计算机上运行。也就是说,#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复制(类似的程序不一样,但也使用)。显然,这似乎是我的机器的问题。我该如何解决这个问题?
编辑10/8/21:我再次运行代码,使用更多的标志,并将-std=c20改为-std=c2a,这是返回的内容:
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:所有明确的nate解释程序可以通过使用./main
运行
编辑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:我想文件被删除时,我解释错误的朋友和错误的方式,我运行命令lol.所有好:D!
2条答案
按热度按时间cwdobuhd1#
编译时需要使用额外的标志
-std=c++20
。此外,在你的代码中有一个错误:
pi
和pi2
被声明为const
,因此你不能在初始化后修改它们。使用这个代替:字符串
zxlwwiss2#
请在您的机器上使用您的g++版本尝试以下代码和“compile”命令:
字符串
如果它工作,很好。如果它是相同的,尝试“-std=c20”和/或“-std=gnu20”。查看这里的细节:https://gcc.gnu.org/projects/cxx-status.html
另请参阅: