2012-08-24 4 views
0

저는 이미 여기에 시간을 썼음에도 불구하고 지금은 내 첫 번째 게시물입니다. 2d 배열을 반환하는 함수에 문제가 있습니다. 내 게임 클래스에서 private 보드의 int 배열 속성 int board [6] [7]을 정의했지만이 속성에 대한 공용 getter를 만드는 방법을 알지 못합니다.Getter가 C++에서 2 차원 배열을 반환합니다.

이 내 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이 같은 뭔가가 (원인 분명히, 첫 번째 요소에 대한 포인터 그것은) 2 차원 배열 작동하지 않습니다

Game *game = new Game; 
int board[Game::m_rows][Game::m_cols] = game->getBoard(); 
: 난 내 MAIN.CPP 예를 들면이를 넣을 수 있습니다

int **Game::getBoard() 
{ 
    return m_board; 
} 

그래야

아무도 나를 도울 수 있습니까? 내 게임에 무엇을 넣어야합니까?

감사합니다.

답변

6

값을 기준으로 배열을 함수 안팎으로 전달할 수 없습니다. 그러나 다양한 옵션이 있습니다.

(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); 
+0

감사합니다. 제 1 옵션을 사용하겠습니다. – user1623241

관련 문제