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

标签 c++ arrays c struct

我在 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++ 中使用它时,我得到了这个编译器错误: 错误 C2143:语法错误:在“常量”之前缺少“]”

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

最佳答案

您正在尝试使用 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
  }};

关于c++ - C 和 C++ 中的结构中数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62853650/

相关文章:

c++ - 在没有页面文件的系统上修剪 "working set"会产生什么影响?

c++ - 优化这个功能?

ios - View Controller 无法访问数组中的元素

c - 初始化时数组得到什么值

c - 使用 fork() 和 signal 程序随机挂起或停止执行

c++ - 这个回调函数有什么作用?

c++ - 我如何对工厂进行单元测试?

java - 将随机数存储在数组中,不相邻重复

c - 预处理器参数和在 C 中编译#ifndef#ifdef

c - 获取数组中每个 int 的 LSB 并将它们组合起来创建一个字节