嗨,我知道有很多类似的问题,但是我已经遍历了它们,但似乎无法使我的函数正常工作。我需要返回一个指向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();
};

最佳答案

您应该执行以下操作:

// 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]

08-27 12:06