std::complex<float> 错误 C2106:“=”:左操作数必须是左值
std::complex<float> with error C2106: '=': left operand must be l-value
我对我的 signal
进行了快速傅里叶变换 (fft),将其转换为 signalComplex
; signal
是一系列实浮点数,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};
}
它编译得很好。
我对我的 signal
进行了快速傅里叶变换 (fft),将其转换为 signalComplex
; signal
是一系列实浮点数,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};
}
它编译得很好。