我有一個函數:如何將多維指針數組傳遞給函數?
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
我再變函數dclaration to:
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