C++與Java不同。 int a[][];
不允許作爲變量類型。一些誤導C++的特點是,第一尺寸允許被留爲空:
int foo(int a[]);
int foo(int a[][3]);
int foo(int a[][3][4]);
另一個誤導C++特徵是,這是在陣列中的初始化允許(編譯器將計數的大小):
int a[][] = {{1,2}, {1,2,3,4}, {1}};
這相當於:
int a[3][4] = {{1,2}, {1,2,3,4}, {1}};
的非常情況下 - 使用std ::向量:
std::vector<std::vector<int>> board;
Foo(std::vector<std::vector<int>> board) : board(board) {}
如果您不能使用std :: vector的不管是什麼原因 - 那麼唯一的解決辦法是使用int**
有兩種尺寸:
int** board;
size_t s1;
size_t s2;
Foo(int** board = NULL, size_t s1 = 0, size_t s2 = 0) : board(board), s1(s1), s2(s2) {}
但要注意,你不能使用此方法:
int board[][] = {{1,1,2},{1,2,2}};
Foo foo((int**)board,2,3);
,因爲你必須提供一個動態數組:
int** board = new int*[2] { new int[3]{1,1,2}, new int[3]{1,2,2}};
而且因爲 - 你必須實現的拷貝構造函數,賦值操作符和析構函數:
Foo(const Foo& other) : TODO { TODO }
~Foo() { TODO }
Foo& operator = (Foo other) { TODO }
所以,僅僅使用std :: vector的。
使用'std :: vector'。 – Mankarse
你不能使用數組而不知道第二維的大小。 –