Инициализация массива в структуре в C и C ++ - PullRequest
3 голосов
/ 11 июля 2020

У меня есть следующий код в 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 ++?

1 Ответ

6 голосов
/ 11 июля 2020

Вы пытаетесь использовать назначенный инициализатор , который разрешен в 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
  }};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...