1

比較的単純な質問がありますが、自分のケースに固有の答えが見つからないようで、この問題に正しい方法でアプローチしていない可能性があります. 次のようなクラスがあります。

struct tileProperties
{
    int x;
    int y;
};

class LoadMap
{      
  private:        
    ALLEGRO_BITMAP *mapToLoad[10][10];   
    tileProperties *individualMapTile[100]; 

  public: 
    //Get the struct of tile properties
    tileProperties *getMapTiles();
};

ゲッター関数については、次のような実装があります。

tileProperties *LoadMap::getMapTiles()
{
    return individualMapTile[0];
}

配列内の各構造体に 100 個のタイル プロパティを割り当てる LoadMap クラスのコードがあります。main.cpp ファイルでこの構造体の配列にアクセスできるようにしたいのですが、正しい構文やアプローチが見つからないようです。私のmain.cppは次のようになります。

 struct TestStruct
{
    int x;
    int y;
};

int main()
{
   LoadMap  _loadMap;
   TestStruct *_testStruct[100];
    //This assignment will not work, is there
    //a better way?
   _testStruct = _loadMap.getMapTiles();

   return 0;
}

これには多くのアプローチがあることを認識していますが、この実装を可能な限り非公開にしようとしています。誰かが私を正しい方向に向けることができれば、私はそれを大いに感謝します. ありがとうございました!

4

3 に答える 3

2
TestStruct *_testStruct;
_testStruct = _loadMap.getMapTiles();

これにより、返された配列の最初の要素へのポインターが取得されます。その後、残りの 99 まで繰り返すことができます。

ベクトルまたは別のコンテナーを使用し、そのようなベア配列へのポインターを返さないゲッターを作成することを強くお勧めします。

于 2013-02-21T05:33:47.090 に答える
0

まず、ここで、なぜTestStructが必要なのですか、「tileProperties」構造自体を使用できます...

そして、インプのこと、tileProperties * individualMapTile [100]; 構造体へのポインタの配列です。

したがって、individualMapTileにはポインタが含まれます。最初のポインタを返したため、最初の構造にのみアクセスできます。他の人はどうですか????

tileProperties** LoadMap::getMapTiles()
{
  return individualMapTile;
}

int main()
{
   LoadMap _loadMap;
   tileProperties **_tileProperties;
  _tileProperties = _loadMap.getMapTiles();

    for (int i=0; i<100;i++)
{
    printf("\n%d", (**_tileProperties).x);
    _tileProperties;
}
   return 0;
}
于 2013-02-21T11:35:13.430 に答える
0

可能であれば、配列の代わりにベクトルを使用してください。また、それらへのポインターではなく、TestStruct の配列/ベクトルを直接検討してください。あなたのコードサンプルからそれが適切かどうかはわかりません。

class LoadMap
{      
public:
    typedef vector<tileProperties *> MapTileContainer;

    LoadMap()
        : individualMapTile(100) // size 100
    {
        // populate vector..
    }

    //Get the struct of tile properties
    const MapTileContainer& getMapTiles() const
    {
        return individualMapTile;
    }

    MapTileContainer& getMapTiles()
    {
        return individualMapTile;
    }

private:         
    MapTileContainer individualMapTile; 
};

int main()
{
    LoadMap _loadMap;
    LoadMap::MapTileContainer& _testStruct = _loadMap.getMapTiles();
}
于 2013-02-21T12:02:16.793 に答える