[英]C++ pointer to 2D array
嗨,我知道有很多類似的問題,但我已經通過它們,我似乎無法使我的功能工作。 我需要返回一個指向2D數組的指針。 到目前為止,我正在使用此代碼:
(此代碼是Level.cpp中的函數)
TileType* CLevel::getTiles()
{
TileType (*matrix_ptr)[31] = tiles;
return *matrix_ptr;
}
(TileType是一個枚舉)這個函數只返回一行,我顯然需要兩個。 有什么建議么?
頭文件Level.h:
class CLevel
{
private:
list<CBox> boxes;
TileType tiles[GRID_HEIGHT][GRID_WIDTH];
CPlayer player;
public:
CLevel();
~CLevel();
CPlayer* getPlayer();
list<CBox>* getBoxes();
TileType** getTiles();
};
不要定義getTiles()。
你完全破壞了類的封裝。 這並不總是重要,但在這種情況下,C / C ++ 2D陣列不適合傳遞到其外部可能無法知道的尺寸。
因此,在tile上定義您的操作作為CLevel的方法。
你應該做的是:
// Class declaration
class CLevel
{
public:
TileType (*getTiles())[GRID_WIDTH];
TileType tiles[GRID_HEIGHT][GRID_WIDTH];
//...
};
// Implementation
TileType (*CLevel::getTiles())[GRID_WIDTH]
{
return tiles;
}
或這個:
// Class declaration
class CLevel
{
public:
TileType (&getTiles())[GRID_WIDTH][GRID_HEIGHT];
TileType tiles[GRID_HEIGHT][GRID_WIDTH];
//...
};
// Implementation
TileType (&CLevel::getTiles())[GRID_WIDTH][GRID_HEIGHT]
{
return tiles;
}
這是一個復雜的聲明,但從內到外閱讀:在兩種情況下, getTiles()
都是一個函數,它返回對二維拼貼數組的引用(該示例顯示了兩種語法形式)。 通過調用getTiles()
您實際上是指tiles
。 你甚至可以用這種方式調用它: getTiles()[i][j]
。
如果要返回指向2d數組的指針,那么函數聲明應為:
TileType** CLevel::getTiles()
你的返回應該是matrix_ptr,而不是它的指針內容(這是一維數組)。
return matrix_ptr;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.