2013-05-09 4 views
0

Я скомпилировал программу в CodeBlocks (которая использует gcc), и она отлично работает. Теперь я попытался скомпилировать ту же программу, используя gcc из командной строки. он произвел эту ошибку:Параметры компилятора gcc с complex.h

error: lvalue required as left operand of assignment 

для этих четырех линий:

OutArray[Index[g]].real() = TempVBF.FirstReal[g]; 
OutArray[Index[g]].imag() = TempVBF.FirstImag[g]; 
OutArray[Index[g]+ElementSize].real() = TempVBF.SecondReal[g]; 
OutArray[Index[g]+ElementSize].imag() = TempVBF.SecondImag[g]; 

в этих линиях Я четыре значения, содержащего действительные и мнимые части 2 комплексных чисел. и я присваиваю эти значения двум сложным переменным. Я попытался сделать это следующим образом:

OutArray[Index[g]] = (TempVBF.FirstReal[g],TempVBF.FirstImag[g]); 

собравшего но генерируются неправильные значения времени выполнения

почему это скомпилировать первый, но не сейчас ?? какой вариант я могу использовать, чтобы обойти это без изменения этих строк?

Я использую команду:

gcc lib/Globals.cpp lib/Comp/SNT_FFT_Comp.cpp lib/Comp/ST_FFT_Comp.cpp lib/Comp/VNT_FFT_Comp.cpp lib/Comp/VT_FFT_Comp.cpp lib/Decomp/* test/main.cpp -lpthread -std=gnu++0x -o TEST 

удаления -std=gnu++0x производит намного больше ошибок. изменение его на -std=c++0x ничего не меняет.

ответ

1

Ошибка, которую вы видите, почти наверняка потому, что real() и imag() возвращают значение реальной или мнимой части; не ссылка на него. Не видя код, это невозможно знать наверняка, но это было бы гораздо больше шансов быть определена следующим образом:

double real() const { return this->_real; } 

, чем как это:

double& real() { return this->_real; } 

С последним случаем, вы могли бы используйте ссылку для выполнения задания. В первом случае у вас есть копия реальной части вашего комплексного номера, и вы не можете изменить свой сложный номер с этим. Вы можете read more about lhvalues and rhvalues, если хотите.

Что касается того, почему это не сработало в первую очередь, на это почти невозможно ответить. Код при условии, кажется, отсутствует тип - другие слова, похоже, что вы должны сделать что-то вроде этого:

OutArray[Index[g]] = MyComplexNumberClass(TempVBF.FirstReal[g],TempVBF.FirstImag[g]); 

Почему значения неверны может быть из-за очень многие вещи (память плющит, индекс «g» ошибочен, комплексные числа не имеют значений, которые, по вашему мнению, должны иметь и т. д.). Чтобы отладить это, вы можете попробовать распечатать значение вещей шаг за шагом, пока не увидите то, чего не ожидаете, либо с std::cerr, либо by using gbd.

Смежные вопросы