使用 real() 和 imag() 为复杂变量赋值的问题
Problem with assigning values to complex variables using real() and imag()
我想为我首先使用 std::complex<float>
定义的复杂变量分配一个值(此处为 0.0f)。然后应使用 real(...)=0.0f
和 imag(...)=0.0f
分配变量的实部和虚部。但是通过编译我得到错误“左值需要作为赋值的左操作数”。我尝试了 g++ 7.5 和 6.5,但都收到了这个错误。
temp = new float[ nfft ];
tempComplex = new std::complex< float >[ nf ];
if ( processing->getComponentNSToProc() ) {
for ( int i = 0; i < sampNum; i++ ) {
temp[ i ] = srcData[ iSrc ].rcvData[ iRcv ].dataNS[ i ];
qDebug() << "before: temp[" << i << "] =" << temp[ i ] << "; ....dataNS[" << i << "] =" << srcData[ iSrc ].rcvData[ iRcv ].dataNS[ i ] << ";";
}
for ( int i = sampNum; i < nfft; i++ ) {
temp[ i ] = 0.0f;
qDebug() << "before: temp[" << i << "] =" << temp[ i ] << ";";
}
for ( int i = 0; i < nf; i++ ) {
real( tempComplex[ i ] ) = 0.0f;
imag( tempComplex[ i ] ) = 0.0f;
real, and imag,可以不带参数调用,那么它们将return对象的只读实部或虚部。如果您用一个参数调用它们,那么它们将修改 real/imaginary 部分。
例如
std::complex<float> z;
z.real(1.0f); // Sets the real part
x.imag(-2.0f); // Sets the imaginary part
为了使用 class 的非静态成员函数,我们需要通过 class 的对象来使用(调用)它。因此,您可以将代码更改为:
int main()
{
std::complex<float> *tempComplex = new std::complex< float >[ 3];
for ( int i = 0; i < 3; i++ )
{
tempComplex[i].real(0.0f);
tempComplex[i].imag(0.0f);
std::cout<<tempComplex[i]<<std::endl;
}
}
上面的代码现在可以工作了,因为 tempComplex[i]
是一个对象,我们访问 class [=14] 的名为 real
和 imag
的非静态成员函数=]通过这个(tempComplex[i]
)对象。
此外(在适当的时候)不要忘记使用 delete
。
我想为我首先使用 std::complex<float>
定义的复杂变量分配一个值(此处为 0.0f)。然后应使用 real(...)=0.0f
和 imag(...)=0.0f
分配变量的实部和虚部。但是通过编译我得到错误“左值需要作为赋值的左操作数”。我尝试了 g++ 7.5 和 6.5,但都收到了这个错误。
temp = new float[ nfft ];
tempComplex = new std::complex< float >[ nf ];
if ( processing->getComponentNSToProc() ) {
for ( int i = 0; i < sampNum; i++ ) {
temp[ i ] = srcData[ iSrc ].rcvData[ iRcv ].dataNS[ i ];
qDebug() << "before: temp[" << i << "] =" << temp[ i ] << "; ....dataNS[" << i << "] =" << srcData[ iSrc ].rcvData[ iRcv ].dataNS[ i ] << ";";
}
for ( int i = sampNum; i < nfft; i++ ) {
temp[ i ] = 0.0f;
qDebug() << "before: temp[" << i << "] =" << temp[ i ] << ";";
}
for ( int i = 0; i < nf; i++ ) {
real( tempComplex[ i ] ) = 0.0f;
imag( tempComplex[ i ] ) = 0.0f;
real, and imag,可以不带参数调用,那么它们将return对象的只读实部或虚部。如果您用一个参数调用它们,那么它们将修改 real/imaginary 部分。
例如
std::complex<float> z;
z.real(1.0f); // Sets the real part
x.imag(-2.0f); // Sets the imaginary part
为了使用 class 的非静态成员函数,我们需要通过 class 的对象来使用(调用)它。因此,您可以将代码更改为:
int main()
{
std::complex<float> *tempComplex = new std::complex< float >[ 3];
for ( int i = 0; i < 3; i++ )
{
tempComplex[i].real(0.0f);
tempComplex[i].imag(0.0f);
std::cout<<tempComplex[i]<<std::endl;
}
}
上面的代码现在可以工作了,因为 tempComplex[i]
是一个对象,我们访问 class [=14] 的名为 real
和 imag
的非静态成员函数=]通过这个(tempComplex[i]
)对象。
此外(在适当的时候)不要忘记使用 delete
。