私はC++でコーディングするのが初めてで、学校ではtictactoeゲームを作成する必要があります。私は親クラスのField(これは競技場であり、2次元データ配列で構成されている)とConsoleField(コンソール上で出力するための印刷メソッドを実装している)という子クラスを持っています。後でGuiFieldに別のクラスを追加して、同じゲームロジックを使用するが、別の印刷方法を使用できるように、これを行います。C++で親クラスの2次元配列を初期化すると、子クラスのポインタが不正になる
とにかく、私の問題は、子クラスのコンストラクタから親クラスのコンストラクタにプレーフィールドのサイズを渡し、2dのデータ配列を初期化することです。私は、コンストラクタの初期化リストを使って次のようにしてみました。
class ConsoleField : public Field {
public:
ConsoleField(int size) : Field(size)
{
}
void print() = 0;
};
class Field {
protected:
int size;
int** data;
public:
Field(int size):size(size)
{
int** data = new int*[size];
for (int i = 0; i < size; i++)
{
data[i] = new int[size];
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
data[i][j] = 0;
}
}
}
void print() {};
};
デバッグするとき、私は親クラスのコンストラクタは、私はそれがやりたいすべてを行い、それが子コンストラクタから取得し、また、データの2次元アレイとを初期化へのポインタを作成し、そのメンバ変数サイズ=サイズを設定することを見つけますしかし、子コンストラクタに戻るとき、子クラスのメンバ変数データは設定されず、そのポインタは0000000を返します。
親コンストラクタを使用して2次元配列を初期化する方法子クラスとデータ配列への有効なポインタを取得?
ありがとうございました。
ああ、私はそれを得ます。ありがとうございました!私はかなりのコードを見て、それがどのように私の前を滑ったのかわからない。私はすでにそれを知っていたはずです。どうもありがとうございます! –