1

最初に、私のプログラムは、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問題はおそらく私が使用する方法ですか?

4

2 に答える 2

1

このループ:

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];
}

10 個の要素がObjectsあり、そのうちの 9 個しか初期化しないため、完全な初期化を行っていないようです。

私はあなたが欲しいと思います

for (i=0; i<10; i++)

またはさらに良い

for (i=0; i<(sizeof(Objects)/sizeof(Objects[0])); i++)
于 2013-07-20T16:58:54.803 に答える