0

嗨,我知道有很多类似的问题,但我已经解决了这些问题,但我似乎无法让我的功能正常工作。我需要返回一个指向二维数组的指针。到目前为止,我正在使用此代码:

(这段代码是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();
};
4

3 回答 3

2

不要定义 getTiles()。

你完全打破了类的封装。这并不总是很重要,但在这种情况下,C/C++ 2D 数组不适合在可能不知道其维度的外部传递。

因此,将您对瓦片的操作定义为 CLevel 的方法。

于 2012-05-19T11:23:51.760 回答
1

你应该做的是:

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

于 2012-05-19T11:13:31.540 回答
-1

如果你想返回一个指向二维数组的指针,那么你的函数声明应该是:

TileType** CLevel::getTiles()

你的回报应该是matrix_ptr,而不是它的指针内容(它是一个一维数组)。

return matrix_ptr;
于 2012-05-19T11:06:02.977 回答