2013-02-21 78 views
1

我有一個相對簡單的問題,但我似乎找不到適合我的案例的答案,我可能不會以正確的方式處理這個問題。我有一個類,看起來像這樣:如何在一個getter函數中返回一個類的結構數組

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個屬性數組中的每個結構。我想能夠訪問我的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

可能重複的[從函數返回數組](http://stackoverflow.com/questions/6422993/return-an-array-from-function) – jogojapan 2013-02-21 05:33:13

回答

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

這將讓你的指針數組中的第一要素返回。然後你可以遍歷其他的99.

我強烈建議使用向量或其他容器,並編寫不返回指向裸數組的指針的getter。

0

首先,在這裏,我們爲什麼需要TestStruct,你可以使用 「tileProperties」 結構本身......

和IMP的事情, 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; 
} 
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(); 
} 
相關問題