3

クラスでは、クラスがその型で作成されたオブジェクトを持つまで、境界を指定せずに配列 (ヘッダー クラスにあるため事前定義されています) を作成したいと考えています。例えば:

class RandomClass{
public:
    int myarray[][];//Remember this is a 2D array, 1D arrays can be defined like this.
}

(このクラスは不完全です、私は知っています、そうではないふりをするだけです)「境界を定義せずに配列を作成することは許可されていない」ため、明らかにこれは機能しません

だから私の質問は、どうすればこれを行うことができますか? または、クラスのメンバーにパブリックにアクセスされるクラスのコンストラクター内に配列を作成するにはどうすればよいですか。

なぜ私がこれをしたいのかについてのちょっとした情報; 2D ゲームのマップを処理するクラスを作成しようとしています。クラスが作成されると、コンストラクターのパラメーターを介してマップのサイズが与えられ、配列が作成されるので、それは必要ありません。マップ自体のサイズよりも大きい。ベクトルを使用できる可能性があることは知っていますが、それらを 2 次元にするのは困難です。(私の質問に答える場合は、最初に主な質問に答えてください。この状況でベクトルを使用する方法を教えてはいけません-しかし、それも役に立ちます)

理由はあまりありませんが、エラーを投稿します。

エラー: 多次元配列としての 'my​​array' の宣言には、最初の次元を除くすべての次元の境界が必要です

4

1 に答える 1

5

最初の質問の答えは

int** myarray;

次に、コンストラクターで

RandomClass(int rows, int cols)
{
    myarray = new int*[rows];
    for (int i = 0; i < rows; ++i)
        myarray[i] = new int[cols];
}

2番目の質問の答えは

vector< vector<int> > myvector;

2D ベクトルは単にベクトルのベクトルであり、コンストラクターで

RandomClass(int rows, int cols) : myvector(rows, vector<int>(cols))
{
}
于 2013-10-12T07:49:46.960 に答える