std :: abs是否返回复数值?也就是说,实数值表示为具有零虚部的复数。我收到此错误
g++ -march=native "utilities.cpp" -fpic -g -Wall -c -std=c++11 -I"/home/torbjorr/deployed" -o "__wand_targets_dbg/utilities.o"
In file included from /usr/include/c++/4.8/algorithm:62:0, from /home/torbjorr/deployed/herbs/memory/memory.h:14, from /home/torbjorr/deployed/vector/matrixstorage.h:10, from frame_in.h:9, from utilities.cpp:6: /usr/include/c++/4.8/bits/stl_algo.h: In instantiation of '_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = std::complex<float>*; _OIter = float*; _UnaryOperation = std::complex<float> (*)(const std::complex<std::complex<float> >&)]': utilities.cpp:89:34: required from here /usr/include/c++/4.8/bits/stl_algo.h:4926:12: error: cannot convert 'std::complex<float>' to 'float' in assignment *__result = __unary_op(*__first);
当这样调用时:
std::transform(spectrum.begin(),spectrum.end(),temp.begin()
,std::abs<std::complex<float> >);
来自cppreference.com:
template< class T > T abs( const complex<T>& z );
所以在这种情况下,我希望有一个回归。
答案 0 :(得分:2)
std::transform(spectrum.begin(),spectrum.end(),temp.begin()
,std::abs<std::complex<float> >);
请注意,您正在尝试使用std::abs<std::complex<float>>
。在这种情况下,模板参数T
为std::complex<float>
。如果您在T
的签名中替换std::abs
,则会得到以下结果:
std::complex<float> abs( const std::complex<std::complex<float>>& z );
我相信您打算使用的功能是std::abs<float>
,这会产生如下签名:
float abs(const std::complex<float>& z);
答案 1 :(得分:0)
由于错误消息显示表达式的类型
spectrum.begin()
和spectrum.end()
为std::complex<float>*
虽然表达式temp.begin()
的类型为float*
您正在尝试应用功能
template< class T > T abs( const complex<T>& z );
到float类型的对象,但没有从类型complex<float
到类型float.
的隐式转换。
错误:无法转换&#st; :: complex&#39;到&#39;漂浮&#39;在任务中 __ result = __unary_op( __ first);
答案 2 :(得分:-2)
任何数字(实数或复数)的绝对值都定义为从原点到Argand平面上的点的矢量长度。
这是一个实数。