C和C ++中的结构数组初始化

安东·杜赞科(Anton Duzenko)

我在C中有以下代码可以正常工作

typedef struct { float m[16]; } matrix;

matrix getProjectionMatrix(int w, int h)
{
  float fov_y = 1;
  float tanFov = tanf( fov_y * 0.5f );
  float aspect = (float)w / (float)h;
  float near = 1.0f;
  float far = 1000.0f;

  return (matrix) { .m = {
    [0] = 1.0f / (aspect * tanFov ),
    [5] = 1.0f / tanFov,
    [10] = -1.f,
    [11] = -1.0f,
    [14] = -(2.0f * near)
  }};
}

当我尝试在C ++中使用它时,出现此编译器错误: error C2143: syntax error: missing ']' before 'constant'

为什么会这样,将代码移植到C ++的最简单方法是什么?

dbush

您正在尝试使用C中允许指定初始值设定项,但C ++不允许。

您需要显式初始化各个成员:

  return (matrix) { {
    1.0f / (aspect * tanFov ),
    0, 0, 0, 0,
    1.0f / tanFov,
    0, 0, 0, 0,
    -1.f,
    -1.0f,
    0, 0,
    -(2.0f * near),
    0
  }};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章