解决成员请求...这是非类型的

时间:2015-04-20 20:14:42

标签: c++ visual-studio mingw-w64

我想知道为什么以下代码在Visual Studio中编译但在移植期间在Mingw GCC中出现编译错误。这是我第一次与__m128类型进行联系,但是来自此this链接指出

You should not access the __m128 fields directly. You can, however, see these types in the debugger. A variable of type __m128 maps to the XMM[0-7] registers.

代码库非常旧,此类型用作

Matrix m;
__m128  b0 = _mm_set_ps(b[0][0], b[1][0], b[2][0], 0);
__m128  b1 = _mm_set_ps(b[0][2], b[1][3], b[2][4], 0);

__m128  a00 = _mm_load1_ps(&a[0][0]);
__m128  a10 = _mm_load1_ps(&a[1][0]);
__m128  r1a = _mm_mul_ps(a00, b0);
__m128  r1b = _mm_mul_ps(a10, b1);
__m128  r1 = _mm_add_ps(r1a, r1b);

m[0][0] = r1.m128_f32[3];

我得到的错误是

 error: request for member 'm128_f32' in 'r1', which is of non-class type '__m128 {aka __vector(4) float}'
  m[0][0] = r1.m128_f32[3];

我尝试查找此错误herehere但是我认为它们不适用于我的案例,因为它们处理的是C ++最令人烦恼的解析问题。 有关如何解决此问题的任何建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

GCC不像VS那样使用这些类型的联合,类型作为内置类型处理。您可以直接索引__m128,请参阅here。 当然,这引入了可移植性问题。在我的项目中,我使用带有union和重载operator []的包装类,但生成的代码是次优的。