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 typecomplex<T>
:If either argument has type
complex<long double>
or typelong double
,then both arguments are effectively cast tocomplex<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>
orfloat
,then both arguments are effectively cast tocomplex<float>
.
2被提升为double,而pow(complex< float>,double)返回复数< double>.
总结以上是内存溢出为你收集整理的C 11中的std :: complex的C 11复制赋值 – 与’operator’不匹配全部内容,希望文章能够帮你解决C 11中的std :: complex的C 11复制赋值 – 与’operator’不匹配所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)