如何包含 <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
进行编译。
此外,您的代码中存在错误:pi
和 pi2
被声明为 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 您的命令和任何错误消息都完全正确。
'希望对您有所帮助。
运行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
编辑 10/8/21 v3:
使用./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: 我认为当我向朋友解释错误以及我 运行 执行命令的错误方式时文件被删除了哈哈。一切都好 :D !
您需要使用额外标志 -std=c++20
进行编译。
此外,您的代码中存在错误:pi
和 pi2
被声明为 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 您的命令和任何错误消息都完全正确。
'希望对您有所帮助。