Что ж, в сообщении об ошибке говорится это :) Если вы создаете новый массив, то new возвращает указатель на его первый элемент.
Многомерный массив - это просто еще одно имя для массива массивов. Вы обновили массив int[3]
, и точно их количество. Итак, что нового делает, это возвращает указатель на int[3]
. Переменная, которой вы присваиваете результат, должна иметь этот тип, который является указателем на массив из 3 целых чисел:
int (*triangles)[3];
triangles = new int[numTriangles][3];
triangles[triangleIndex][vertexIndex] = 42;
Конечно, здесь также помогают typedefs:
typedef int triangles_t[3];
triangles_t * triangles = new int[numTriangles][3];
Скобки необходимы из-за правил приоритета C ++. Они сообщают компилятору, что он создает не массив из трех указателей на целые числа, а указатель на массив из трех целых чисел. Это похоже на более распространенное использование указателей на функции ("void (*funptr)()"
) ...