我有一个相对简单的问题,但我似乎无法找到针对我的案例的答案,我可能不会以正确的方式解决这个问题。我有一个看起来像这样的课程:
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;
}
我意识到有很多方法,但我试图尽可能保持这种实现的私密性。如果有人能指出我正确的方向,我将非常感激。谢谢!
答案 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();
}