C ++中的复数示例不起作用

Posted

技术标签:

【中文标题】C ++中的复数示例不起作用【英文标题】:complex number example in c++ not working 【发布时间】:2019-02-22 19:35:23 【问题描述】:

来自 (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 直播:godbolt.org/z/xJyk2e @Jan SE - 你真的很好地提出了这个问题:a)你引用了你从哪里得到代码,b)你包含了一个完整的、自包含的例子,c)你发布了特定错误,d) 您提供了编译器版本和平台。问题:看起来该示例与您的 G++ 5.4 版本不兼容。 @paulsm4 在哪里可以找到我需要的版本? c++,gcc,cpp有区别吗???哪个最好用?安装新版本难吗? @JanSE 如果你使用c++ -o complex_numbers_example complex_numbers_example.cpp -std=c++14会发生什么? “在哪里可以找到我需要的版本?”:使用在线编译器链接(如上)并更改编译器版本。将编译器更改为早期版本,直到找到编译/不编译边界。回答 4.9.0 及更高版本。 【参考方案1】:

在 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++文件不是可执行文件。

【讨论】:

以上是关于C ++中的复数示例不起作用的主要内容,如果未能解决你的问题,请参考以下文章

C++ CUDA:为啥我的块尺寸不起作用?

注释不起作用,甚至在Dygraphs自己的jsFiddle示例中,为什么?

*.pyd 库中的 C++ Boost Python 方法不起作用

ReactJs 中的 CSS 模块 + Ant 设计不起作用

为啥我在 C 中的多维动态分配不起作用?

string1 中的 string2 计数在 C 中不起作用,但在 Python 中起作用