コンストラクターで、 array = new array [arg1][arg2]を実行しようとしています
次のように配列タイプを指定する必要があります
array = new int[arg1][arg2];
これは C++11 でのみ機能することに注意してください。古い標準を使用する場合、2 番目の配列サイズは const である必要があります (これはおそらく必要なものではありません)。
同じ問題について議論している追加の記事もいくつかあります。
理想的には、とにかく C++ を使用しているためstd::vector
、別の回答で提案されているとおりに使用する必要があります。
ただし、ベクトルは多くのオーバーヘッドを使用しますね。私は記憶の使用を軽く保つようにしています。–</p>
から始めstd::vector
ます。機能的な観点からアプリケーションが適切に実行されたら、メモリ使用量やパフォーマンスにまだ懸念がある場合は、ベンチマークを実行してください。2D 配列をクラスに適切にカプセル化すると、それを使用するコードに影響を与えることなく、配列の実際の実装をいつでも変更できます。
技術的には、配列を含む 1 つのフラットなメモリ領域があることを確認したい場合は、次のコードのように、1 次元配列を使用して 2 次元配列をシミュレートできます (アイデアを得るために、確かにいくつかの改善が必要です。特に、コピー構築と代入演算子が欠落しています):
class Array2D {
private:
int *array;
int size1;
public:
Array2D(int arg1, int arg2) {
size1 = arg1;
array = new int[arg1 * arg2];
}
~Array2D() {
delete[] array;
}
int& at(int i1, int i2) {
return array[i1 * size1 + i2];
}
};
int main() {
Array2D array(10, 10);
array.at(2, 2) = 42;
std::cerr << array.at(2, 2);
return 0;
}