У меня есть функция:Как передать многомерный массив указателей на функцию?
void ord_matrix_multiplication(Cache& cache, Block* block1[][], Block* block2[][], Block* block3[][], int A[][], int B[][], int C[][], int i, int j, int k, int n, int s)
я следующий код в вызывающей функции:
int A[n][n];
Block* blocks1[n][n];
int B[n][n];
Block* blocks2[n][n];
int C[n][n];
Block* blocks3[n][n];
...
//some code
...
ord_matrix_multiplication(cache, blocks1, blocks2, blocks3, A, B, C, i, j, k, n, s);
Но я получаю следующее сообщение об ошибке:
cacheaware.cpp:35: error: declaration of ‘block1’ as multidimensional array must have bounds for all dimensions except the first
cacheaware.cpp:35: error: expected ‘)’ before ‘,’ token
cacheaware.cpp:35: error: expected initializer before ‘*’ token
Затем я изменил функцию до:
void ord_matrix_multiplication(Cache& cache, Block* block1[][100], Block* block2[][100], Block* block3[][100], int A[][100], int B[][100], int C[][100], int i, int j, int k, int n, int s)
На этом я получаю:
cannot convert ‘Block* (*)[(((unsigned int)(((int)n) + -0x00000000000000001)) + 1)]’ to ‘Block* (*)[100]’ for argument ‘2’ to ‘void ord_matrix_multiplication(Cache&, Block* (*)[100], Block* (*)[100], Block* (*)[100], int (*)[100], int (*)[100], int (*)[100], int, int, int, int, int)’
Может кто-то пожалуйста, скажите мне, как я мог это исправить?
Если 'n' постоянная , вы используете [массивы переменной длины] (http://en.wikipedia.org/wiki/Variable-length_array), которые не являются стандартными в C++. Почему бы не использовать 'std :: vector' вместо этого? Вы можете сделать вектор векторов, и передать его проще. –
@JoachimPileborg: n передается в качестве аргумента вызывающей функции. – nish
@JoachimPileborg: Есть ли способ, кроме использования векторов? – nish