Почему у меня перестало работать присвоение переменной gr_complex (GNU Radio)? - PullRequest
0 голосов
/ 01 мая 2018

В определении блока для моего пользовательского оборудования приемопередатчика SDR я использую следующую комплексную переменную:

gr_complex complexSample;

В моем коде, который успешно работал в течение двух лет до недавнего обновления до последней версии gnuradio, я использую следующие назначения:

complexSample.real() = realInt;
complexSample.imag()= imagInt;

Однако, когда я пытаюсь скомпилировать сейчас, я получаю следующую ошибку:

error: lvalue required as left operand of assignment

К сожалению, если я уберу пару скобок, я получу следующую ошибку:

ошибка: недопустимое использование функции-члена void std :: complex :: imag (float) '(вы забыли' () '?)

Исходная версия gnuradio, которую я использовал, это 3.7.5-5 , а последняя версия, до которой я обновился: 3.7.10.1-2 .

Изменилось ли что-то существенное между этими двумя выпусками, что могло бы объяснить эту разницу в поведении?

Если да, то каково решение?

Может ли это быть как-то связано с "интеграцией Volk" (что бы это ни было ...).

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Нет, GNU Radio не изменилось gr_complex. Это все еще псевдоним для std::complex<float>.

Что, вероятно, изменилось, так это то, что вы сейчас используете компилятор с C ++ 14, и это заставляет std::complex<float>.real() возвращать const, который вы не можете назначить. (Я думаю, это то, что происходит.)

Вы должны либо просто создать значение, как вы хотите, то есть

gr_complex foo(realpart, imagpart)

или используйте сеттеры

gr_complex foo;
foo.real(realpart);
foo.imag(imagpart);
0 голосов
/ 01 мая 2018

Как показывает сообщение об ошибке, gr_complex - это typedef для std::complex<float>. Это означает, что методы .real() и .imag() являются геттерами, а не сеттерами.

Это не то, что вы хотите в любом случае. Вы просто хотите присвоить номер, а не отдельные его компоненты: complexSample = gr_complex{realInt, imagInt}.

...