std::complex<float> 错误 C2106:“=”:左操作数必须是左值

std::complex<float> with error C2106: '=': left operand must be l-value

我对我的 signal 进行了快速傅里叶变换 (fft),将其转换为 signalComplexsignal 是一系列实浮点数,signalComplex 代表一系列复数:

std::vector<std::complex<float>> signalComplex(numSamplesPerScan);   // int numSamplesPerScan

    fft.fwd(signalComplex, signal);    //  std::vector<float> signal

    for (int n = 1; n < numSamplesPerScan / 2; n++)   // simplified procedure to calculate HT
    {
        float real = signalComplex[n].real();   // positive frequency X 2
        float imag = signalComplex[n].imag();

        real *= 2;
        imag *= 2;

        signalComplex[n].real() = real;  // compiler complains here
        signalComplex[n].imag() = imag;  // compiler complains here

        signalComplex[n + numSamplesPerScan / 2].real() = 0;    // compiler complains here
        signalComplex[n + numSamplesPerScan / 2].imag() = 0;    // compiler complains here
    }

在上面的 for 循环中,我试图对 signalComplex 的实部和虚部进行一些简单的计算。但是,编译器会抱怨“error C2106: '=': left operand must be l-value”;在这种情况下,我不确定如何计算实部虚部。

感谢任何指点。非常感谢某些代码。

我要感谢这里所有试图帮助我的人。

正如布赖恩指出的那样,问题中的代码被修改为

std::vector<std::complex<float>> signalComplex(numSamplesPerScan);

fft.fwd(signalComplex, signal);

for (int n = 1; n < numSamplesPerScan / 2; n++)   
{
    signalComplex[n] = { signalComplex[n].real()*2, signalComplex[n].imag()*2 };  // following is the key part
    signalComplex[n + numSamplesPerScan / 2] = {0, 0};
}

它编译得很好。