0

次のような 2D 配列: Cell **scoreTable.割り当て後:

scoreTable = new Ceil*[10]; 
for(int i = 0 ;i<10;i++) 
scoreTable[i] = new Ceil[9]; 

そして、私は次のように値を保存したい:scoreTable[i][j]= new Ceil(i,j)ヒープで、これは c++ では機能しません。助けてくれてありがとう。

4

3 に答える 3

1

scoreTable[i][j]= new Ceil(i,j). Cell*セルに入れようとしています。

ポインターの 2 次元配列を作成する必要があります。

auto scoreTable = new Ceil**[10]; 
for(int i = 0 ;i<10;i++) 
    scoreTable[i] = new Ceil*[9]; 

しかし、使用する方がはるかに優れていますvector

std::vector< std::vector<Ceil*> > table;
table.resize(10);
for (int i = 0; i < 10; ++i)
{
    table[i].resize(9, NULL);
}
table[3][4] = new Ceil();
于 2012-05-08T10:00:10.127 に答える
0

このように配列を割り当てたら、すでに の 2D 配列があるため、キーワードをCell使用して値を変更する必要はありません。new

Cellクラスに のようなメソッドを指定すると、次のようにSetValue(i,j)使用できます。scoreTable[i][j].SetValue(i,j);

于 2012-05-08T10:02:35.697 に答える
0

代わりに使用することをお勧めしstd::vectorます。追跡する方がはるかに簡単です。

上記のすべてのコードを次のように置き換えることができます

std::vector< std::vector< Cell> > scoreTable(10, std::vector<Cell>(9));

scoreTableこれは、 の 10 個の要素を含むベクトルでvector<Cell>、それぞれが 9 個のセルを含むを作成します。つまり、目的の 2D テーブルです。

同じ方法で要素にアクセスします。scoreTable[i][j]ここで、i は 0 から 9 まで、j は 0 から 8 までです。

新しい行で展開したい場合は、次のように言ってください。

 scoreTable.push_bach(std::vector<Cell>(9));

新しい列の場合:

for(size_t row = 0; row < scoreTable.size(); ++row) {
  scoreTable[row].push_back(Cell());
}

newまたはは必要ありませんdelete

于 2012-05-08T10:25:28.447 に答える