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

Time:11-09

I want to assign a value (here 0.0f) to a complex variable which I defined first using std::complex<float>. The real and imaginary part of the variable should be then assigned using real(...)=0.0f and imag(...)=0.0f. But by compiling I get the error "lvalue required as left operand of assignment". I tried g 7.5 and also 6.5 and I got this error from both.

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;

CodePudding user response:

For using a non-static member function of a class we need to use(call) it through an object of that class. So you can change your code to look like:

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;
   }
}

The above code now works because tempComplex[i] is an object and we access the non-static member function named real and imag of the class std::complext<float>through this(tempComplex[i]) object.

Also after everything(at appropriate point) don't forget to use delete.

CodePudding user response:

real, and imag, can be invoked without arguments, then they will return the read only real part or imaginary part of the object. If you call them with one argument then they will modify the real/imaginary part.

For instance

std::complex<float> z;
z.real(1.0f); // Sets the real part
x.imag(-2.0f); // Sets the imaginary part
  • Related