2016-07-08 4 views
0

Я получаю эту ошибку 'lvalue, требуемую как левый операнд назначения', когда запускает один и тот же кусок кода в QT на компьютере Windows, но отлично работает, когда я использую linux машина.Ошибка: lvalue требуется как левый операнд присваивания, что делать

unsigned int width = Width, height = Height, slice = Slice; 

typedef boost::multi_array<std::complex<double>,3> IMAGE; 
typedef IMAGE::index im; 
IMAGE Image(boost::extents[slice][height][width]); 

for (im i = 0; i < slice; i++) 
{ 
    for (im j = 0; j < height; j++) 
    { 
     for (im k = 0; k < width; k++) 
     { 
      Image[i][j][k].real() = image[i][j][k]; 
      Image[i][j][k].imag() = 0; 
     } 
    } 
} 

является ошибкой из-за разницы в компиляторе? или что-то мне не хватает? версия Linux имеет GCC компилятор и версия окна использует MinGW 32 Bit

+2

Что 'реальные()' и 'емк()' вернуть? –

+0

@serpentor - это правильно. Они возвращают 'double', а не' double & '. Используйте 'Image [i] [j] [k] .real (изображение [i] [j] [k]); вместо этого. – ilotXXI

+0

@ Gill Bates real() возвращает реальную часть изображения, а imag() возвращает мнимую часть изображения. Предполагая, что изображение имеет сложные значения. – serpentor

ответ

4

real() и imag() возвращение назначаемых ссылок была нестандартным расширением для libstdC++ (source). Если вы установите -std=c++1y в g ++, вы получите ту же ошибку.

Для изменения значения вы должны использовать 'сеттер' версии вместо:

Image[i][j][k].real(image[i][j][k]); 
Image[i][j][k].imag(0); 
+0

incase image [i] [j] [k] - сложное изображение с реальными и мнимыми частями, то как же я это дифференцирую? – serpentor

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