使用 real() 和 imag() 为复杂变量赋值的问题

Problem with assigning values to complex variables using real() and imag()

我想为我首先使用 std::complex<float> 定义的复杂变量分配一个值(此处为 0.0f)。然后应使用 real(...)=0.0fimag(...)=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] 的名为 realimag 的非静态成员函数=]通过这个(tempComplex[i])对象。

此外(在适当的时候)不要忘记使用 delete