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

How to include <numbers> header file and use std::numbers

运行ning 在 gcc 和 g++ 11.1.0 版上。每次我 运行 这段代码我 运行 进入它说 std::numbers 未声明的问题。我在我的终端中尝试了 运行ning g++ randomCodeWhileReading.cpp -o main-std=c++20 (im 运行ning 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;

}

只想看看数字模块的运行情况。 (它甚至被称为模块还是头文件?)

编辑 10/6/21: 修改常量变量已得到修复。但是,此代码在我的计算机上仍然不会 运行。也就是说,#include <numbers> 在我的机器上似乎不起作用,即使使用 -std=c++20 也会抛出错误。我是 运行ning 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

可以运行所有clear nate explained program

编辑 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 !

您需要使用额外标志 -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;
}

请使用您的 g++ 版本在您的机器上尝试此代码和此“编译”命令:

/* 
 * 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=c++20”and/or“-std=gnu++20”。详情请看这里:https://gcc.gnu.org/projects/cxx-status.html

另请参阅:

绝对“更新”您的 post 以报告发生的情况。请务必 copy/paste 您的命令和任何错误消息都完全正确。

'希望对您有所帮助。