2016-07-08 49 views
0

當我在Windows機器上運行QT中的同一段代碼時,我得到此錯誤'作爲賦值的左操作數所需的左值',但在使用Linux時正常工作機。錯誤:作爲左操作數所需的左值要做的事情

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編譯器和Windows版本使用MINGW 32位

+2

什麼'真正的()'和'IMAG()'返回? –

+0

@serpentor是對的。他們返回'double',而不是'double'。使用'Image [i] [j] [k] .real(image [i] [j] [k]);'而不是。 – ilotXXI

+0

@Gill Bates real()返回圖像的實部,imag()返回圖像中的虛部。假設圖像具有複雜的值。 – serpentor

回答

4

real()imag()返回可分配引用是libstdC++(source)的非標準擴展。如果你用g ++設置-std=c++1y,你會得到同樣的錯誤。

對於改變你應該使用 '二傳手' 版本,而不是值:

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

incase image [i] [j] [k]是一個既有實部也有虛部的複合圖像,那我該如何區分呢? – serpentor

相關問題