为什么分配到gr_complex变量(GNU Radio)停止为我工作?

时间:2018-05-01 07:11:42

标签: c++ gnuradio

在我的自定义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整合' (不管是什么......)。

2 个答案:

答案 0 :(得分:2)

如错误消息所示,gr_complexstd::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);