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

gijlo24d  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(121)

在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!

cwdobuhd

cwdobuhd1#

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

#include <iostream>
#include <numbers>

int main()
{
    const long double pi = std::numbers::pi_v<long double>;
    const long double pi2 = std::numbers::pi_v<long double>;
    std::cout << pi << std::endl << pi2;
}

字符串

zxlwwiss

zxlwwiss2#

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

/* 
 * TEST ENVIRONMENT: MSYS2 (Windows 10)
 * COMPILER: 
 *   g++ --version
 *   g++.exe (Rev5, Built by MSYS2 project) 10.3.0
 * BUILD COMMAND: 
 *   g++ -g -Wall -pedantic -std=c++2a -o x x.cpp
 *   <= NOTE: the correct command for C++ 20 compatibility in g++ 10.x is "-std=c++2a"
 * RUN COMMAND:
 *   ./x
 *   2pi=6.28319
 */
#include <iostream>
#include <numbers>

int main()
{
    auto two_pi = 2*std::numbers::pi;
    std::cout << "2pi=" << two_pi << '\n';
}

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

相关问题