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