Я новичок в C ++, и у меня есть вопрос, который должен быть легким, но это сводит меня с ума. Я пытаюсь настроить 2D-массив. Массив объявлен в Solver.h
примерно так:
protected:
static const int gridSize = 9;
int theGrid[gridSize][gridSize]
int *boxes[gridSize][gridSize];
...
и я пытаюсь инициализировать его в Solver::Solver()
примерно так:
boxes[0] ={ &theGrid[0][0],&theGrid[0][1],&theGrid[0][2],
&theGrid[1][0],&theGrid[1][1],&theGrid[1][2],
&theGrid[2][0],&theGrid[2][1],&theGrid[2][2]
};
...
Но ошибка, которую я получаю, говорит: «выражение должно быть изменяемым lvalue» и «ошибка: ожидалось выражение». Это не имело смысла для меня, потому что у меня сложилось впечатление, что boxes[0]
является изменяемым значением l.
Итак, я написал крошечную (не ООП) программу, в которой просто есть следующее: main()
:
int test[2][2];
test[0]= {1,2};
cout<<test[0][1]; //outputs "2" as expected.
А теперь я застрял и растерялся. Что не так с моей процедурой назначения в классе Solver?
Чтобы ответить на несколько вопросов:
Мне нужен многомерный массив, потому что в итоге я буду настраивать boxes[1]
с другим массивом указателей на другой набор данных внутри theGrid
, третий набор в boxes[2]
и так далее. Идея состоит в том, чтобы взять сетку 9x9 и разбить ее на квадраты 3x3 (звучит знакомо? «Солвер» должен просто решать наборы судоку.), Чтобы я мог проверить (и изменить) все значения в этих квадратах 3x3 независимо.
Я пытаюсь заставить это работать в VS2010.
Я уверен, что есть хороший алгоритм для определения того, какие элементы массива являются частью каждого «ящика» 3x3 на основе этого числа ящиков, но я еще не выбрал его, и кажется, что один раз кодировать его не так, как перезапуск программы -создавать эти поля в циклах каждый раз, когда проверяет ответ. Для этой программы размер theGrid
неизменен, поэтому моя совесть позволит мне с легким жестким кодированием.