Привет! Я делаю этот проект, и сейчас я пытаюсь:
- создать некоторые объекты и сохранить их в векторах, которые сохраняются в другом векторе V
- перебирать векторы внутри V
- перебирать объекты внутри отдельных векторов
Во всяком случае, я просто искал в Интернете и наткнулся на функцию stl for_each. Это выглядит довольно аккуратно, но у меня проблемы с этим. Я пытаюсь использовать его следующим образом:
for_each(V.begin(), V.end(), iterateThroughSmallVectors);
iterateThroug.... просто делает то же самое с переданным ему вектором..
Теперь я получаю странную ошибку времени выполнения "Векторные итераторы несовместимы". Я посмотрел на это и не могу найти никакой полезной информации по этому поводу.
Я не знаю, поможет ли это, но V — это частный вектор ‹>, хранящийся в классе A, у которого есть доступ к нему, и я пытаюсь выполнить итерацию по нему в классе B, выполнив:
A->getV().begin(), A->getV().end(), etc..
Кто-нибудь понял, что происходит?
РЕДАКТИРОВАТЬ: Хорошо, поэтому я думаю, что лучше просто опубликовать код, и где могут возникнуть проблемы...
getTiles в gameState.h:
vector<vector<tile*>> getTiles();
Циклы for_each в main.cpp:
for_each(currState->getTiles().begin(),currState->getTiles().end(), drawTiles);
.
.
void drawTiles(vector<tile*> row)
{
for_each(row.begin(), row.end(), dTile);
}
void dTile(tile *t)
{
t->draw();
}
создание векторов:
int tp = -1;
int bCounter = 0;
int wCounter = 0;
for (int i = 0; i < 8; i++)
{
vector<tile*> row(8);
for (int j = 0; j < 8; j++)
{
tile *t = new tile(tp, (i+(SIDELENGTH/2))*SIDELENGTH,
(j+(SIDELENGTH/2))*SIDELENGTH);
row.push_back(t);
tp *= -1;
}
currState->setTiles(row);
tp *= -1;
}
и на всякий случай это может быть актуально:
void gameState::setTiles(vector<tile*> val)
{
tiles.push_back(val);
}
Стало ли легче обнаружить проблему сейчас? Я надеюсь на это... И если вы заметите какую-нибудь глупость, которую я могу делать, пожалуйста, дайте мне знать, я новичок в C++, и указатели и ссылки все еще меня смущают.
РЕДАКТИРОВАТЬ2: Спасибо, ребята, это сработало отлично... хорошо для этой проблемы, теперь, кажется, у меня проблема с созданием плиток и их построением в векторе-строке.. кажется, что даже через вектор создается и проходит правильно , тайлов, которые должны были быть в нем, нет (они теряются после :
for (int j = 0; j < 8; j++)
{
tile *t = new tile(tp, (i+(SIDELENGTH/2))*SIDELENGTH,
(j+(SIDELENGTH/2))*SIDELENGTH);
row.push_back(t);
tp *= -1;
}
петля. Если у кого-то из вас есть хорошие идеи по решению этой проблемы, пожалуйста, помогите мне;) Тем временем я буду продолжать пытаться это исправить.