27.07.2013, 20:29. Просмотров 2337. Ответов 5
Здравствуйте!
У меня возникла проблема во время удаления элементов, значения которых не удовлетворяли условию.
П.С: До того как создавать тему, я пошастал по форуму, но так и не нашел похожей проблемы и её решения, поэтому и создал это тему.
Есть следующие файлы:
Main.cpp
Bullet.hpp
Bullet.cpp
(В глубину кода можете не вдоваться, рисую пули в OpenGL, в координатной оси с осями от -250 до 250, и приходиться производить дополнительные вычисления для перевода координат пуль из одной системы координат в другую)
Main.cpp(выделил нужный кусок кода):
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #include "Bullet.hpp"
vector<Bullet> bullets;
. . . .
for(auto iter = bullets.begin(); iter != bullets.end(); iter++)
{
if( iter -> x > 250 || iter -> x < -250 || iter -> y > 250 || iter -> y < -250 ){
bullets.erase(iter);
}else{
iter -> moveBullet();
}
} |
|
Bullet.hpp:
C++ |
1
2
3
4
5
6
7
8
9
10
11
| struct Bullet{
double x;
double y;
double k;
bool isXnegative;
void initBullet(double _x, double _y);
void moveBullet();
}; |
|
Bullet.cpp:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| #include "Bullet.hpp"
void Bullet::initBullet(double _x, double _y)
{
_x = _x - 250;
_y = 250 -_y;
k = _y / _x;
if(_x < 0) isXnegative = true; else isXnegative = false;
x = 0;
y = 0;
}
void Bullet::moveBullet()
{
if(isXnegative){
x -= 0.5;
}else{
x += 0.5;
}
y = k * x;
} |
|
Когда пуля выходит за допустимое значение, то есть не удовлетворяет условию из main.cpp, она должна удалиться.
Но я получаю следующую ошибку: "Expression: vector iterator not incrementable"
В интернете не мало времени потратил на поиск решения этой проблемы, уже понял что так удалять нельзя, и за собой ещё надо удалять этот итератор, но когда я делаю
C++ |
1
| vector<Bullet*>::iterator iter = bullets.begin(); |
|
чтоб в дальнейшем удалить и итератор, он мне говорит, что:
IntelliSense: no suitable user-defined conversion from "std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Bullet>>>" to "std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Bullet *>>>" exists c:\Users\NanoBreaker\Documents\Visual Studio 2012\Projects\Bullet's trajectory\Bullet's trajectory\Main.cpp 53
Более чем уверен что, решение этой проблемы довольно простое, но увы я не могу его найти.
Спасибо за последующие ответы.