gcc 如何包含< numbers>头文件并使用std::numbers

gijlo24d  于 2024-01-08  发布在  其他
关注(0)|答案(2)|浏览(158)

在gcc和g++的版本11.1.0上运行。每次我运行这段代码时都会遇到问题,它说std::numbers没有声明。我尝试在我的终端中运行g++ randomCodeWhileReading.cpp -o main-std=c++20(im运行ubuntu Linux),仍然没有变化。下面是有问题的代码:

  1. #include <iostream>
  2. #include <numbers>
  3. int main()
  4. {
  5. const long double pi {0};
  6. const long double pi2 {0};
  7. pi = std::numbers::pi_v<long double>;
  8. pi2 = std::numbers::pi_v<long double>;
  9. std::cout << pi << std::endl << pi2;
  10. }

字符串
只是想看看numbers模块的运行情况。(它到底是被称为模块还是头文件?)
编辑10/6/21:修改一个常量变量已经被修复。然而,这段代码仍然不会在我的计算机上运行。也就是说,#include <numbers>似乎在我的机器上不工作,即使使用-std=c++20也会抛出错误。我正在运行gcc和g++版本11.1,请参阅下面的错误:

  1. gcc ex2_03.cpp -o -std=c++20
  2. ex2_03.cpp: In function int main()’:
  3. ex2_03.cpp:22:65: error: std::numbers has not been declared
  4. 22 | const double pond_diameter {2.0 * std::sqrt(pond_area/ std::numbers::pi)}; //find diameter by finding radius & multiplying by 2
  5. |


然而,我无法使用godbolt.org复制(类似的程序不一样,但也使用)。显然,这似乎是我的机器的问题。我该如何解决这个问题?
编辑10/8/21:我再次运行代码,使用更多的标志,并将-std=c20改为-std=c2a,这是返回的内容:

  1. chris@chris-Aspire-E5-576G:~/Desktop/programming/c++/Learning$ ls
  2. ex2_02 HelloWorld randomCodeWhileReading textbookExample1
  3. ex2_02.cpp HelloWorld.cpp randomCodeWhileReading.cpp textbookExample1.cpp
  4. ex2_02.o HelloWorld.o randomCodeWhileReading.o textbookExample1.o
  5. ex2_03 main textbookDebug textbookOutputNameAndAge.cpp
  6. ex2_03.cpp outputNameAndAge textbookDebug.cpp
  7. ex2_03.o outputNameAndAge.o textbookDebug.o
  8. chris@chris-Aspire-E5-576G:~/Desktop/programming/c++/Learning$ g++ -g -Wall -pedantic -std=c++2a -o randomCodeWhileReading.cpp
  9. g++: fatal error: no input files
  10. compilation terminated.


添加了ls输出以显示我在正确的目录中。
编辑10/8/21 v2:我使用了以下命令,没有收到错误。

  1. g++ randomCodeWhileReading.cpp -o main -std=c++20


现在只是混淆了输出的去向。通过@nate的回复,我假设它被发送到main?只是想看到一个使用std::numbers::pi的cout
编辑10/8/21 v3:所有明确的nate解释程序可以通过使用./main运行
编辑10/8/21 v4:.我重复了前面的命令,得到了一个错误:

  1. g++ randomCodeWhileReading.cpp -o main -std=c++20
  2. cc1plus: fatal error: randomCodeWhileReading.cpp: No such file or directory
  3. compilation terminated.


谁能解释一下这次出了什么问题吗?(我还在同一个目录下)。使用ls后,文件似乎不再在目录下,似乎被删除了?
编辑10/8/21 v5:我想文件被删除时,我解释错误的朋友和错误的方式,我运行命令lol.所有好:D!

cwdobuhd

cwdobuhd1#

编译时需要使用额外的标志-std=c++20
此外,在你的代码中有一个错误:pipi2被声明为const,因此你不能在初始化后修改它们。使用这个代替:

  1. #include <iostream>
  2. #include <numbers>
  3. int main()
  4. {
  5. const long double pi = std::numbers::pi_v<long double>;
  6. const long double pi2 = std::numbers::pi_v<long double>;
  7. std::cout << pi << std::endl << pi2;
  8. }

字符串

zxlwwiss

zxlwwiss2#

请在您的机器上使用您的g++版本尝试以下代码和“compile”命令:

  1. /*
  2. * TEST ENVIRONMENT: MSYS2 (Windows 10)
  3. * COMPILER:
  4. * g++ --version
  5. * g++.exe (Rev5, Built by MSYS2 project) 10.3.0
  6. * BUILD COMMAND:
  7. * g++ -g -Wall -pedantic -std=c++2a -o x x.cpp
  8. * <= NOTE: the correct command for C++ 20 compatibility in g++ 10.x is "-std=c++2a"
  9. * RUN COMMAND:
  10. * ./x
  11. * 2pi=6.28319
  12. */
  13. #include <iostream>
  14. #include <numbers>
  15. int main()
  16. {
  17. auto two_pi = 2*std::numbers::pi;
  18. std::cout << "2pi=" << two_pi << '\n';
  19. }

字符串
如果它工作,很好。如果它是相同的,尝试“-std=c20”和/或“-std=gnu20”。查看这里的细节:https://gcc.gnu.org/projects/cxx-status.html
另请参阅:

展开查看全部

相关问题