Форум программистов, компьютерный форум CyberForum.ru

Удаление элемента из вектора ( std::vector<Bullet> ) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ двусвязной список http://www.cyberforum.ru/cpp-beginners/thread929636.html
Привет всем! помогите пожалуйста ! пришлите пожалуйста кто нибудь код реализации связного списка (чтобы был метод вставка и удаление произвольного узла) для изучения...
C++ написать прогу что же это Добавлено через 35 секунд Фух. 50 минут создавал. вот http://www.cyberforum.ru/cpp-beginners/thread929632.html
C++ Подтормаживающий рандом
Сделал простую змейку. #include <iostream> #include <Windows.h> #include <cstdlib> #include <ctime> #include <conio.h> enum napr {up = 2, left, right, down}; napr headN = right; napr hvostN = right; COORD c, apple, head, hvost;
Шаблонные классы. Присвоение к указателю и приведение типов C++
Добрый вечер, ув. форум, есть к вам вопрос. Есть род. абстрактный класс: ParentAbstact Есть два наследника: ChildOne : public ParentAbstact и ChildTwo : public ParentAbstact Есть шаблонный класс: TempClass <T> Есть глобальные экземпляры: extern TempClass<ChildOne> childOne и extern TempClass<ChildOne> childTwo Это всё из приватного фреймворка, к сожалению:cry:, дополнительную информацию я...
C++ dll http://www.cyberforum.ru/cpp-beginners/thread929606.html
1. Можно ли использовать DLL, созданную на одном языке программирования в программе на другом языке? 2. Я так понял, DLL работает только под Windows. Есть ли возможность сделать библиотеку функций, чтобы ее можно было использовать в любой ОС, но так чтобы у пользователя библиотеки не было доступа к исходному коду?
C++ Шаблоны и параметр по умолчанию Добрый день. Вроде всё делаю по учебнику, но компилятор не пропускает: #include <iostream> #include <vector> #include <cstdlib> template<class T> bool DefaultComparand(const T &, const T &); template<class T, class Function = DefaultComparand<T>> void Ssort(std::vector<T>& base, Function fn = DefaultComparand<T>() ) подробнее

Показать сообщение отдельно
NanoBreaker
 Аватар для NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 82
27.07.2013, 20:29     Удаление элемента из вектора ( std::vector<Bullet> )
Здравствуйте!
У меня возникла проблема во время удаления элементов, значения которых не удовлетворяли условию.

П.С: До того как создавать тему, я пошастал по форуму, но так и не нашел похожей проблемы и её решения, поэтому и создал это тему.

Есть следующие файлы:
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

Более чем уверен что, решение этой проблемы довольно простое, но увы я не могу его найти.
Спасибо за последующие ответы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru