Вы можете использовать vector
векторов:
std::vector<std::vector<state> > mem;
Вы можете динамически добавлять его, и вам не нужно беспокоиться о размере (хотя, если вы примерно знаете размер, вы можете предварительно выделить его, чтобы избежать изменения размера), а также очистка памяти происходит автоматически - когда вектор исчезает области действия, его компоненты также будут удалены.
Ваш код не работает, потому что у вас нет конструктора по умолчанию для state
.
Дело в том, что когда вы пишете state mem[200][100];
, компилятор попытается создать 100 * 200 state
объектов, но не может. Чтобы это работало, вам понадобится конструктор по умолчанию в state
:
struct state {
state() : down(0), half(0) {} //default constructor
int down, half;
state(int d, int h) : down(d), half(h) {}
int valid() {
return down != -1 && half != -1;
}
};