我收到此错误'左值作为分配的左操作数'当在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位
答案 0 :(得分:5)
real()
和imag()
返回可分配引用是libstdc ++(source)的非标准扩展。如果您在g ++中设置-std=c++1y
,则会收到相同的错误。
要更改值,您应该使用&#39; setter&#39;版本代替:
Image[i][j][k].real(image[i][j][k]);
Image[i][j][k].imag(0);