这是我关于SO的第一篇文章,尽管我已经在这里度过了一段时间。 我有一个函数返回一个二维数组的问题。我在我的Game类中定义了一个私有的2d int数组属性 int board [6] [7] ,但我不知道如何为这个属性创建一个公共getter。
这些是我的game.h的相关部分:
#ifndef GAME_H
#define GAME_H
class Game
{
public:
static int const m_rows = 6;
static int const m_cols = 7;
Game();
int **getBoard();
private:
int m_board[m_rows][m_cols];
};
#endif // GAME_H
现在我想要的是game.cpp中的类似内容(因为我认为没有括号的数组名称是指向第一个元素的指针,显然它不适用于2d数组):
int **Game::getBoard()
{
return m_board;
}
所以我可以把这个放在我的main.cpp中:
Game *game = new Game;
int board[Game::m_rows][Game::m_cols] = game->getBoard();
任何人都可以帮助我,我应该把什么放在我的game.cpp中?
谢谢!
答案 0 :(得分:7)
您无法通过值将数组传入和传出函数。但是有各种各样的选择。
(1)使用std::array<type, size>
#include <array>
typedef std::array<int, m_cols> row_type;
typedef std::array<row_type, m_rows> array_type;
array_type& getBoard() {return m_board;}
const array_type& getBoard() const {return m_board;}
private:
array_type m_board;
(2)使用正确的指针类型。
int *getBoard() {return m_board;}
const int *getBoard() const {return m_board;}
private:
int m_board[m_rows][m_cols];
int[][]
没有涉及指针。它不是指向整数数组指针数组的指针,它是一个整数数组的数组。
//row 1 //row2
[[int][int][int][int]][[int][int][int][int]]
这意味着一个int*
指向所有这些。要获得行偏移量,您可以执行以下操作:
int& array_offset(int* array, int numcols, int rowoffset, int coloffset)
{return array[numcols*rowoffset+coloffset];}
int& offset2_3 = array_offset(obj.getBoard(), obj.m_cols, 2, 3);