【发布时间】:2018-04-21 10:29:51
【问题描述】:
这是我的代码:
#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';
}
我用 gcc hello.cpp -lstdc++ -o hello.o 编译
当我执行 std::complex z2=std::pow(1i, 2);..
时,基本上它不会让我将复数的幂加倍我收到以下错误
错误:没有匹配函数调用 'pow(complex int, int)' std::complex z2=std::pow(1i, 2);
但是,如果我删除复数并执行 std::complex z2=std::pow(2, 2);
它返回 4,正确答案..
还有很多行编译错误,但我把它说得很简短
【问题讨论】:
-
std::pow(2, 2)只是简单的2提升到2的幂。它与虚数或复数无关,它是标准的浮点std::pow函数。 -
编译将
using namespace std::complex_literals;更改为using namespace std::literals::complex_literals;需要 C++14 链接:godbolt.org/g/3yrjN7 -
@RichardCritten 没用
-
@Someprogrammerdude 你是说 std::pow 不能提高复数的幂吗?
-
如果在 gcc 命令行中添加
-std=c++14选项会发生什么?