C++はJavaとは異なります。int a[][];
変数型としては許可されていません。誤解を招くC++の機能のいくつかは、最初のサイズを空のままにしておくことができるということです。
int foo(int a[]);
int foo(int a[][3]);
int foo(int a[][3][4]);
もう1つの誤解を招くC++機能は、これが配列の初期化で許可されていることです(コンパイラーはサイズをカウントします)。
int a[][] = {{1,2}, {1,2,3,4}, {1}};
これは次と同等です:
int a[3][4] = {{1,2}, {1,2,3,4}, {1}};
あなたの場合-std::vector:を使用してください
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を使用するだけです。