在我的自定义SDR收发器硬件的块定义中,我使用以下复杂变量:
gr_complex complexSample;
在我的代码中,在最近升级到最新的gnuradio版本之前已成功运行了两年,我使用了以下分配:
complexSample.real() = realInt;
complexSample.imag()= imagInt;
但是,当我尝试编译时,我收到以下错误:
error: lvalue required as left operand of assignment
令人沮丧的是,如果我删除这对括号,我会收到以下错误:
错误:无效使用成员函数' void 的std ::复杂:: IMAG(浮点)' (你忘记了'()'?)
我使用的gnuradio
的原始版本是 3.7.5-5 ,我升级到的最新版本是: 3.7.10.1-2 。
这两个版本之间是否有重大变化可以解释这种行为差异?
如果是,解决方案是什么?
这可能与Volk整合' (不管是什么......)。
答案 0 :(得分:2)
如错误消息所示,gr_complex
是std::complex<float>
的typedef。这意味着.real()
和.imag()
方法是getter,而不是setter。
这不是你想要的。您只想分配号码,而不是其单独的组件:complexSample = gr_complex{realInt, imagInt}
。
答案 1 :(得分:1)
不,GNU Radio没有改变gr_complex
。它仍然是std::complex<float>
的别名。
可能已经改变的是你现在正在使用编译器设置为C ++ 14,这使std::complex<float>.real()
返回一个你无法分配的const。 (我认为会发生什么。)
你应该像你的意思那样构造价值,即
gr_complex foo(realpart, imagpart)
或使用setter
gr_complex foo;
foo.real(realpart);
foo.imag(imagpart);