C ++中的复数示例不起作用
complex number example in c++ not working
来自 (https://en.cppreference.com/w/cpp/numeric/complex) 的简单示例代码不起作用,我不知道为什么?
#include <iostream>
#include <iomanip>
#include <complex>
#include <cmath>
int main()
{
using namespace std::complex_literals;
std::cout << std::fixed << std::setprecision(1);
std::complex<double> z1 = 1i * 1i; // imaginary unit squared
std::cout << "i * i = " << z1 << '\n';
std::complex<double> z2 = std::pow(1i, 2); // imaginary unit squared
std::cout << "pow(i, 2) = " << z2 << '\n';
double PI = std::acos(-1);
std::complex<double> z3 = std::exp(1i * PI); // Euler's formula
std::cout << "exp(i * pi) = " << z3 << '\n';
std::complex<double> z4 = 1. + 2i, z5 = 1. - 2i; // conjugates
std::cout << "(1+2i)*(1-2i) = " << z4*z5 << '\n';
}
我正在遵守
c++ -o complex_numbers_example complex_numbers_example.cpp -std=c++11
并得到错误
complex_numbers_example.cpp: In function ‘int main()’:
complex_numbers_example.cpp:8:26: error: ‘complex_literals’ is not a namespace-name
using namespace std::complex_literals;
^
complex_numbers_example.cpp:8:42: error: expected namespace-name before ‘;’ token
using namespace std::complex_literals;
^
complex_numbers_example.cpp:11:31: error: unable to find numeric literal operator ‘operator""i’
std::complex<double> z1 = 1i * 1i; // imaginary unit squared
^
complex_numbers_example.cpp:11:31: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes
complex_numbers_example.cpp:11:36: error: unable to find numeric literal operator ‘operator""i’
std::complex<double> z1 = 1i * 1i; // imaginary unit squared
^
complex_numbers_example.cpp:11:36: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes
complex_numbers_example.cpp:14:40: error: unable to find numeric literal operator ‘operator""i’
std::complex<double> z2 = std::pow(1i, 2); // imaginary unit squared
^
complex_numbers_example.cpp:14:40: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes
complex_numbers_example.cpp:18:40: error: unable to find numeric literal operator ‘operator""i’
std::complex<double> z3 = std::exp(1i * PI); // Euler's formula
^
complex_numbers_example.cpp:18:40: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes
complex_numbers_example.cpp:21:36: error: unable to find numeric literal operator ‘operator""i’
std::complex<double> z4 = 1. + 2i, z5 = 1. - 2i; // conjugates
^
complex_numbers_example.cpp:21:36: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes
complex_numbers_example.cpp:22:43: error: ‘z5’ was not declared in this scope
std::cout << "(1+2i)*(1-2i) = " << z4*z5 << '\n';
^
当我尝试用
编译时
cpp -o complex_numbers_example complex_numbers_example.cpp
它有效,但在执行时我得到
bash: ./complex_numbers_example: Permission denied
对于 c++ 我使用的版本
c++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
对于 cpp,我使用的是版本
cpp (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
在 c++14 中添加了复杂文字,参见 https://en.cppreference.com/w/cpp/numeric/complex/operator%22%22i
您需要编译:
c++ -o complex_numbers_example complex_numbers_example.cpp -std=c++14
不要尝试用cpp
编译,即C Pre P 处理器并将生成预处理的 c++ 文件而不是可执行文件。
来自 (https://en.cppreference.com/w/cpp/numeric/complex) 的简单示例代码不起作用,我不知道为什么?
#include <iostream>
#include <iomanip>
#include <complex>
#include <cmath>
int main()
{
using namespace std::complex_literals;
std::cout << std::fixed << std::setprecision(1);
std::complex<double> z1 = 1i * 1i; // imaginary unit squared
std::cout << "i * i = " << z1 << '\n';
std::complex<double> z2 = std::pow(1i, 2); // imaginary unit squared
std::cout << "pow(i, 2) = " << z2 << '\n';
double PI = std::acos(-1);
std::complex<double> z3 = std::exp(1i * PI); // Euler's formula
std::cout << "exp(i * pi) = " << z3 << '\n';
std::complex<double> z4 = 1. + 2i, z5 = 1. - 2i; // conjugates
std::cout << "(1+2i)*(1-2i) = " << z4*z5 << '\n';
}
我正在遵守
c++ -o complex_numbers_example complex_numbers_example.cpp -std=c++11
并得到错误
complex_numbers_example.cpp: In function ‘int main()’:
complex_numbers_example.cpp:8:26: error: ‘complex_literals’ is not a namespace-name
using namespace std::complex_literals;
^
complex_numbers_example.cpp:8:42: error: expected namespace-name before ‘;’ token
using namespace std::complex_literals;
^
complex_numbers_example.cpp:11:31: error: unable to find numeric literal operator ‘operator""i’
std::complex<double> z1 = 1i * 1i; // imaginary unit squared
^
complex_numbers_example.cpp:11:31: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes
complex_numbers_example.cpp:11:36: error: unable to find numeric literal operator ‘operator""i’
std::complex<double> z1 = 1i * 1i; // imaginary unit squared
^
complex_numbers_example.cpp:11:36: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes
complex_numbers_example.cpp:14:40: error: unable to find numeric literal operator ‘operator""i’
std::complex<double> z2 = std::pow(1i, 2); // imaginary unit squared
^
complex_numbers_example.cpp:14:40: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes
complex_numbers_example.cpp:18:40: error: unable to find numeric literal operator ‘operator""i’
std::complex<double> z3 = std::exp(1i * PI); // Euler's formula
^
complex_numbers_example.cpp:18:40: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes
complex_numbers_example.cpp:21:36: error: unable to find numeric literal operator ‘operator""i’
std::complex<double> z4 = 1. + 2i, z5 = 1. - 2i; // conjugates
^
complex_numbers_example.cpp:21:36: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes
complex_numbers_example.cpp:22:43: error: ‘z5’ was not declared in this scope
std::cout << "(1+2i)*(1-2i) = " << z4*z5 << '\n';
^
当我尝试用
编译时cpp -o complex_numbers_example complex_numbers_example.cpp
它有效,但在执行时我得到
bash: ./complex_numbers_example: Permission denied
对于 c++ 我使用的版本
c++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
对于 cpp,我使用的是版本
cpp (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
在 c++14 中添加了复杂文字,参见 https://en.cppreference.com/w/cpp/numeric/complex/operator%22%22i
您需要编译:
c++ -o complex_numbers_example complex_numbers_example.cpp -std=c++14
不要尝试用cpp
编译,即C Pre P 处理器并将生成预处理的 c++ 文件而不是可执行文件。