Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114

SFML. Вектора, массивы, классы, объекты

01.11.2017, 21:59. Показов 6369. Ответов 67

Студворк — интернет-сервис помощи студентам
Доброго времени суток форумчане!
Возникла проблема с векторами. но понимаю как работают эти самые векторы.
Задача такова, есть абстрактный класс Object с какими-то функциями(это не столь важно). Так же есть дочерние классы такие как Circle и Circle2. В главной функции создаются новые объекты дочерних классов и заносятся в массив.
НО когда хочу сделать через вектор то выдаёт ошибку: "error: 'vector' does not name a type".
так же по мере решения это проблемы будет ещё несколько вопросов таких как: "Как реализовать уничтожение объектов Массива/Вектора", "Как сделать универсальную функцию определения координат курсора в окне"
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.11.2017, 21:59
Ответы с готовыми решениями:

Не отрисовываются объекты openGL3.0 в SFML
Почему-то не отрисовываются объекты "нового" опенгл. Старый работает нормально. Перепробовал уже кучу примеров, толку никакого. ...

Из первых четырех строк массива сформировать четыре новых вектора (одномерные массивы). Для каждого вектора найти сумму
Дан двухмерный массив размером M x N. Преобразовать его по правилу – все элементы каждого столбца матрицы умножить на минимальный...

Классы и объекты
Добрый день всем.Хотел узнать кое что,надеюсь вопрос будет соответствовать название темы:) На лабораторной поставили задачу,создать...

67
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
02.11.2017, 19:26  [ТС]
Студворк — интернет-сервис помощи студентам
хмм можно сделать функцию через которую каким-то образом удалять объект вызывающий эту функцию?

Добавлено через 3 минуты
вот часть кода объекта Circle2:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Circle2 : public Object{
public:
    float x, XX, y, YY, speed, R=25;
    int dir;
    Object* ID;
 
    RenderWindow *window;
    CircleShape shape;
 
    void Create(){
        ...
    }
 
    void Update(){
        Step();
        Draw();
    }
 
private:
    void Step(){
 
        ...
 
        if (distance_to_point(x, y, mouse_xy(0, window), mouse_xy(1, window))<R){
            shape.setFillColor(Color(75,150,160));
            if (Mouse::isButtonPressed(Mouse::Left))
                //после этого объект должен удалиться
        }
        else
            shape.setFillColor(Color(100,175,200));
    }
 
    void Draw(){
        shape.setPosition(x, y);
        window->draw(shape);
    }
    //~Circle2(){}
};
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.11.2017, 19:29
Что мешает удалять его снаружи?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
02.11.2017, 19:30
Откуда вызывается circle2::update?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
02.11.2017, 19:31  [ТС]
Я не понимаю как это сделать
Знаю что объект должен удаляться после этого:
C++
1
2
3
if (distance_to_point(x, y, mouse_xy(0, window), mouse_xy(1, window))<R){
            shape.setFillColor(Color(75,150,160));
            if (Mouse::isButtonPressed(Mouse::Left))
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.11.2017, 19:31
То, что у тебя Create(), обычно делает конструктор.
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
02.11.2017, 19:37  [ТС]
обновление всех объектов на экране
C++
1
2
3
4
5
void Update(){
    for (std::vector<Object*>::iterator i = obj.begin(); i != obj.end(); ++i){
        (*i)->Update();
    }
}
Добавлено через 35 секунд
Я знаю про конструктор, просто сейчас не в этом дело

Добавлено через 4 минуты
объект Circle/Circle2 создаются в функции main и тут же записываются в вектор
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.11.2017, 19:39
Из цикла своего удаляй. В чём проблема?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
02.11.2017, 19:39  [ТС]
Сами классы в свою очередь отдельные файлы как и их родительский класс Object
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
02.11.2017, 19:39
обновление всех объектов на экране
C++
1
2
3
4
5
6
7
8
void Update(){
    for (std::vector<Object*>::iterator i = obj.begin(); i != obj.end(); /* i ++ */ ){
         if (   (*i)->Update() == false)
               i = obj.erase(i);
          else
                 ++i;
    }
}
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
02.11.2017, 19:43  [ТС]
То есть функция обновления должна возвращать есть ли объект или нет?

Добавлено через 2 минуты
так если я удалю объект из вектора, то сам объект удалиться?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.11.2017, 19:48
Нет, нужен delete.
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
02.11.2017, 19:54  [ТС]
И где использовать delet?

Добавлено через 19 секунд


Добавлено через 3 минуты
Нужен простой, универсальный способ удаления дочерних объектов класса Object, чтоб я мог прописать команду и после неё объект бы удалился
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
02.11.2017, 19:58
Да, так и надо делать. Хранить в векторе и обрабатывать вектор так как я написал. При чем тут delete непонятно. Я никаких delete'ов в коде не писал.
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
02.11.2017, 20:00  [ТС]
Я не знаю как это реализовать, но надо сделать.
В самом "проекте" при запуске, если нажимаешь на шифт или ктрыл, то создаётся объект Circle и Circle2, при попадание на них курсора мыши, они меняют цвет на более тёмный и в итоге если нажимаешь ЛКМ эти объекты должны удалиться, то есть:
1) Перестать отображаться.
2) перестать занимать память.
Должны перестать существовать.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
02.11.2017, 20:16
Чем тебя мой кот не устраивает?
Ты наивно думаешь, что после vector.erase что-то будет занимать память?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
02.11.2017, 20:18  [ТС]
ну ведь в векторе хранятся не объекты а указатели на эти объекты... и в этом я не уверен как раз
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
02.11.2017, 20:23
Я уже и забыл про это. Ну тогда перед erase ставим delete;
C++
1
2
delete *i;
i = obj.erase(i)
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
02.11.2017, 20:28  [ТС]
вот теперь я согласен но по идее Update ничего не возвращает.
Но у меня появилась идея!
C++
1
2
3
4
5
6
7
if (   (*i)->Delete() == true){
       delete *i;
       i = obj.erase(i);
}else{
       (*i)->Update();
       ++i;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.11.2017, 20:32
Цитата Сообщение от SkeiTax Посмотреть сообщение
Но у меня появилась идея!
Я тебе это предложил уже давно.
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
02.11.2017, 20:45  [ТС]
Я не особо хотел затрагивать функцию Обновления... Ведь эта функция нужно для обновления всех объектов

Добавлено через 7 минут
хммм сделал так:
Цитата Сообщение от SkeiTax Посмотреть сообщение
if ( * (*i)->Delete() == true){
* * * *delete *i;
* * * *i = obj.erase(i);
}else{
* * * *(*i)->Update();
* * * *++i;
}
и в итоге выдаёт ошибку...

Добавлено через 4 минуты
При создание объекта возвращает "Process returned -1073741819 (0xC0000005)"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.11.2017, 20:45
Помогаю со студенческими работами здесь

объекты и классы
Здравствуйте. Помогите с задачей. Нужно написать программу на классы и объекты. Пользователь вводит символьную строку, а программа...

Классы, объекты
Привет. Необходимо обратиться к объекту не используя (например, TextBox a = (TextBox)sender) т.к. необходимо использовать ещё и ComboBox с...

Классы и объекты
Создать объявление класса и разработать программу-драйвер, который продемонстрирует работу класса. Клас Cylinder (циліндр). Клас має...

КЛАССЫ И ОБЪЕКТЫ
Помогите с кодом: Рациональная (несократимая) дробь представляется парой целых чисел (а, b), где а — числитель, b — знаменатель....

Классы и объекты
Здравствуйте объясните пожалуйста следующую задачу Нужно создать класс данных А и класс отображения данных В при этом объекст...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru