2016-07-08 13 views
0

Windowsマシン上のQTの同じコードを実行するとこのエラーが発生しますが、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コンパイラを持ち、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

関連する問題