私は以下のように定義された列挙型を持っているので、0-6 の間の値を返すことを期待しています
enum blocks
{ none = 0, red, green, blue, yellow, white, black };
Grid<blocks> gameGrid; // initialised to none
ブロックの色を含む配列へのオフセットとして列挙型を使用しようとしています。ただしgameGrid[y][x]
、上記の範囲外の数値を返すため、セグメンテーション違反が発生します。
fixedColor = colourArray[gameGrid[y][x]];
y と x が範囲 (0-19) 内にあることを確認しました。gdb レポート:
(gdb) print y $1 = 19 (gdb) print x $2 = 5 (gdb) print gameGrid[y][x] $3 = (blocks &) @0x8201dc4: 136172580
以下は、グリッドの定義です。
template <typename T>
class Grid
{
std::deque<Row<T> > rows;
T defaultValue;
public:
const unsigned width, height;
Grid(unsigned inWidth, unsigned inHeight, T inValue) : defaultValue(inValue), width(inWidth), height(inHeight)
{
Row<T> r(width, inValue);
for (unsigned i = height; i; --i)
rows.push_back(r);
}
Row<T>& operator[](unsigned arg) { return rows[arg]; }
.....
行に関して:
template <typename T>
class Row
{
public:
std::vector<T> elements;
Row(unsigned inWidth, T inValue) : elements(inWidth, inValue) {};
T& operator[](unsigned arg) { return elements[arg]; }
....
そして私は電話します:
Game::Game(App& inApp) : theApp(inApp), bgColour(sf::Color::Black), gridWidth(10), gridHeight(20), gameGrid(gridWidth, gridHeight, blocks::none),
.....
ブロック タイプの gameGrid の値がどのように 136172580 に評価されるかについて興味があります。