C 11中的std :: complex的C 11复制赋值 – 与’operator’不匹配

C 11中的std :: complex的C 11复制赋值 – 与’operator’不匹配,第1张

概述下面的代码无法使用-std = c 0x开关使用g版本4.5.0进行编译.我收到以下错误消息: error: no match for 'operator+' in 'std::pow [with _Tp = float, _Up = int, typename __gnu_cxx::__promote_2<_Tp, _Up>::__type = double](((const std::comp 下面的代码无法使用-std = c 0x开关使用g版本4.5.0进行编译.我收到以下错误消息:
error: no match for 'operator+' in 'std::pow [with _Tp = float,_Up = int,typename __gnu_cxx::__promote_2<_Tp,_Up>::__type = double](((const std::complex<float>&)((const std::complex<float>*)(& x))),((const int&)((const int*)(&2)))) + y'

我认为这与here提到的可分配要求有关.我应该为复杂定义我自己的复制赋值运算符吗?如果是这样,怎么样?

#include <complex>using namespace std;int main(int argc,char *argv[]) {  complex<float> x,y;  x = pow(x,2);      // ok  x = x        + y;  // ok  x = pow(x,2) + y;  // error  return 0;}
解决方法 [cmplx.over] / p3指定涉及复杂时的pow的额外重载:

Function template pow shall have additional overloads sufficIEnt to
ensure,for a call with at least one argument of type complex<T>:

If either argument has type complex<long double> or type long double,then both arguments are effectively cast to complex<long
double>
.

Otherwise,if either argument has type complex<double>,double,or an integer type,then both arguments are effectively cast to
complex<double>.

Otherwise,if either argument has type complex<float> or float,then both arguments are effectively cast to complex<float>.

2被提升为double,而pow(complex< float>,double)返回复数< double>.

总结

以上是内存溢出为你收集整理的C 11中的std :: complex的C 11复制赋值 – 与’operator’不匹配全部内容,希望文章能够帮你解决C 11中的std :: complex的C 11复制赋值 – 与’operator’不匹配所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1256033.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存