2

私はすでにここで時間を費やしていましたが、これは SO に関する私の最初の投稿です。ここで、2 次元配列を返す関数に問題があります。Game クラスでプライベート 2d int 配列プロパティint board[6][7]を定義しましたが、このプロパティのパブリック ゲッターを作成する方法がわかりません。

これらは私の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 次元配列では機能しません):

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

たとえば、これを私のmain.cppに入れることができるように:

Game *game = new Game;
int board[Game::m_rows][Game::m_cols] = game->getBoard();

game.cpp に何を入れる必要がありますか?

ありがとう!

4

1 に答える 1

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

Anint[][]にはポインタは含まれていません。これは、整数の配列へのポインターの配列へのポインターではなく、整数の配列の配列です。

//row 1               //row2
[[int][int][int][int]][[int][int][int][int]]

つまりint*、それらすべてを1つ指すということです。行オフセットを取得するには、次のようにします。

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);
于 2012-08-24T17:24:47.433 に答える