最初に、私のプログラムは、struct と 2 つの int 変数を含む構造体とクラスを作成します。
#define fullwidth 200
#define fullheight 200
typedef struct tiles
{
unsigned char red, green, blue;
char* name;
}tiles;
class Units
{
public:
int X_Pos;
int Y_Pos;
tiles MapColour;
}
その後、主要部分で、tiles
表示用の RGB コンテナーとして使用する 2 次元配列と、宣言されたオブジェクトの変更を追跡するオブジェクト ポインターの配列を作成します。
int i, j;
tiles fieldd[fullwidth][fullheight];
Units* DetectorField[fullwidth][fullheight];
Units Objects[10];
その後 (現在はmain()
)、有効な値を持つ両方の配列をアップロードして、それに関する問題を回避します。
for (j=0;j<fullheight;j++)
{
for (i=0;i<fullwidth;i++)
{
fieldd[i][j] = BASE;
DetectorField[i][j] = NULL;
}
}
オブジェクトと同じ+ポインタのオブジェクトメモリアドレスを追加して、オブジェクトを識別できるようにしますDetectorField
。
for (i=0; i<9;i++)
{
Objects[i].X_Pos = i+2; //just some values, not important yet
Objects[i].Y_Pos = 2*i+2;
DetectorField[Objects[i].X_Pos][Objects[i].Y_Pos] = &Objects[i];
}
確かに、これはまだ大丈夫です。しかし、問題はこれからです!次のコードでは、DetectorField
;のすべての要素をチェックします。選択した要素がまだ NULL でない場合 (これは明らかに、他の値を取得できなかったため、オブジェクトのメモリ アドレスにすぎないことを意味します - 私がよく知っている場合)、MapColour
変数を構造体の配列に入れます。 .
for (j=0;j<fullheight;j++)
{
for (i=0;i<fullwidth;i++)
{
if(DetectorField[i][j] != NULL)
{
fieldd[i][j] = DetectorField[i][j]->MapColour;
}
}
}
この時点で、MSVC を実行しようとすると、次のエラー メッセージが表示されます。
私は何を間違えましたか?コンディション内での動作は問題ないようです。fieldd
問題はおそらく私が使用する方法ですか?