ret - указатель на указатель на число с плавающей точкой. Когда вы разыменовываете это, как это: (*ret)
, вы получаете указатель для float. Когда вы берете индекс по этому, например: ( *ret )[ i ]
, это дает вам число с плавающей точкой. Когда вы берете индекс по этому, например так: ( *ret )[ i ][ j ]
, ну, вы пытаетесь индексировать с плавающей запятой. Это не законно.
Если отбросить мое отвращение к этому стилю кодирования, первое, что вы делаете неправильно, это то, что вы не выделяете под-массивы. Однако ошибка компилятора относится к ошибке, проиллюстрированной в первом абзаце. Просто удалите разыменование ret, чтобы это исправить. Вы в конечном итоге с этим:
for ( int i = 0; i < MATRIX3_DIMS; i++ )
{
ret[i] = new float[MATRIX3_DIMS];
for ( int j = 0; j < MATRIX3_DIMS; j++ )
{
ret[ i ][ j ] = matrix[ i ][ j ];
}
}
Это абсолютно не безопасно для исключений, и вы должны использовать класс, который должным образом управляет памятью безопасным способом исключения, как std::vector
.