当我在 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位
最佳答案
real()
和 imag()
返回可分配引用是 libstdc++ ( source ) 的非标准扩展。如果你在 g++ 中设置 -std=c++1y
,你会得到同样的错误。
要更改值,您应该改用“setter”版本:
Image[i][j][k].real(image[i][j][k]);
Image[i][j][k].imag(0);
关于c++ - 错误 : lvalue required as left operand of assignment what to do,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38264539/