Привет! Я делаю этот проект и сейчас пытаюсь:
- создает некоторые объекты и сохраняет их в векторах, которые сохраняются в другом векторе 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 ++, а указатели и ссылки все еще смущают меня.
EDIT2: Спасибо, ребята, это отлично сработало ... хорошо для этой проблемы, теперь, кажется, у меня есть проблема с созданием плиток и нанесением их на вектор строки ... кажется, что даже через вектор создан и проходит правильно, плитки, которые должны были быть в нем, отсутствуют (они теряются после:
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;
}
петля. Если у кого-то из вас есть какие-либо хорошие идеи по решению этой проблемы, вы можете мне помочь;) А пока я буду пытаться это исправить