簡體   English   中英

C ++指向2D數組的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM