如何从getter函数中的类返回结构数组

时间:2013-02-21 05:28:35

标签: c++ arrays struct allegro

我有一个相对简单的问题,但我似乎无法找到针对我的案例的答案,我可能不会以正确的方式解决这个问题。我有一个看起来像这样的课程:

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();
};

我有一个类似于getter函数的实现:

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

我在LoadMap类中有代码,它将为数组中的每个结构分配100个tile属性。我希望能够在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;
}

我意识到有很多方法,但我试图尽可能保持这种实现的私密性。如果有人能指出我正确的方向,我将非常感激。谢谢!

3 个答案:

答案 0 :(得分:2)

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

这将为您提供指向返回数组中第一个元素的指针。然后,您可以遍历其他99。

我强烈建议使用矢量或其他容器,编写那些不会像这样返回指向裸阵列的指针。

答案 1 :(得分: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;
}

答案 2 :(得分: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();
}