|
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
|
|
SFML. Вектора, массивы, классы, объекты01.11.2017, 21:59. Показов 6345. Ответов 67
Доброго времени суток форумчане!
Возникла проблема с векторами. но понимаю как работают эти самые векторы. Задача такова, есть абстрактный класс Object с какими-то функциями(это не столь важно). Так же есть дочерние классы такие как Circle и Circle2. В главной функции создаются новые объекты дочерних классов и заносятся в массив. НО когда хочу сделать через вектор то выдаёт ошибку: "error: 'vector' does not name a type". так же по мере решения это проблемы будет ещё несколько вопросов таких как: "Как реализовать уничтожение объектов Массива/Вектора", "Как сделать универсальную функцию определения координат курсора в окне"
0
|
|
| 01.11.2017, 21:59 | |
|
Ответы с готовыми решениями:
67
Не отрисовываются объекты openGL3.0 в SFML Из первых четырех строк массива сформировать четыре новых вектора (одномерные массивы). Для каждого вектора найти сумму Классы и объекты |
|
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
|
||||||
| 01.11.2017, 23:44 [ТС] | ||||||
|
Вот вам на рассмотрения файл Main.cpp
так как Update постоянно проходит по всему массиву, то при проходе ячейки где БЫЛ когда-то объект выдаёт ошибку
0
|
||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 01.11.2017, 23:44 | |
|
Зачем массив с одним элементом?
0
|
|
|
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
|
|
| 01.11.2017, 23:45 [ТС] | |
|
ну не знаю, но то что там всего один объект не мешает добавлять свыше него новые элементы, не совсем понял почему так происходит...
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 01.11.2017, 23:46 | |
|
Если у тебя вектор, то ты удаляешь сам объект, а затем элемент из вектора. Размер уменьшается и цикл туда не попадёт.
Но ради одного элемента нет смысла использовать массивы.
0
|
|
|
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
|
|
| 01.11.2017, 23:49 [ТС] | |
|
собственно вот и все объекты которые есть на экране (заполненные круги) их как видно более 1-го но это не мешает массиву
0
|
|
|
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
|
|
| 01.11.2017, 23:51 [ТС] | |
|
не знаю почему но массив как-то сам расширяется когда создаю новый объект (Лазурный и Зелёный круг)
0
|
|
|
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
|
|
| 01.11.2017, 23:53 [ТС] | |
|
вот, ещё как демонстрация
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 01.11.2017, 23:54 | |
|
Ты выходишь за пределы массива.
0
|
|
|
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
|
|
| 01.11.2017, 23:55 [ТС] | |
|
и все объекты обновляются нормально, то есть движутся по экрану как и прописано в их классах
Добавлено через 27 секунд Ну это понятно, но разве не должно быть ошибки?
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 01.11.2017, 23:57 | |
|
Гарантированно и с первого раза - нет. Но программа неправильная.
0
|
|
|
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
|
|
| 02.11.2017, 00:03 [ТС] | |
|
Согласен что это косяк, но просто были проблемы с векторами
Добавлено через 1 минуту Как теперь добавлять в вектор новый объект Circle/Circle2 и прочие дочерние объекты? Добавлено через 3 минуты и как более корректно сделать удаление объекта? У меня была идея такая: в то время как функция Update проходит по вектору, то она бы отправляла объекту номер ячейки этого объекта в векторе, так сказать свой ID. В свою очередь объект который был потревожен функцией проверял бы условие уничтожения, удалял своё место в векторе, а затем и сам себя. Ну или есть более простой и корректный способ?
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|||||||
| 02.11.2017, 09:36 | |||||||
|
Что за удаление самого себя? Идёшь по вектору в цикле - сразу и удаляй.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
|
|
| 02.11.2017, 12:49 [ТС] | |
|
Условие на удаление находится внутри объекта и если это условие выполняется то объект должен удалиться.
В проекте есть объекты Круг и круг2 если внутри радиуса этого объекта есть курсор то объект удаляется иначе ничего не делается. И это условие находится внутри объекта круг и круг2
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 02.11.2017, 13:24 | |
|
У тебя какая-то запутанная реализация. Как он удаляет сам себя? Кто delete делает?
Сделай, например, чтобы условие можно было проверить извне, функцию какую-то, и дальше по результату.
0
|
|
|
|
|
| 02.11.2017, 14:43 | |
|
SkeiTax, короче, так никто не пишет. Никакие объекты сами себя удалять не должны, потому что объекты никак не могут знать, кто ими пользуется, каким образом они созданы (через new, malloc, или автоматически как переменная в программе), сколько указателей на них в каких местах программы сохранено и используются и.т.д.
Возможно, исключением из этой ситуации являются самописные смартпойнтеры, но не о них речь.
0
|
|
|
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
|
|
| 02.11.2017, 17:39 [ТС] | |
|
Эх... Собственно к чему все это я узнаю, я узнаю это для того, что бы потом мне было проще реализовывать те или иные объекты. Я хочу сделать подобие игры какой-нибудь. Представим есть объект который может стрелять, то есть этот объект должен создавать другие объекты, объекты пуль который в свою очередь должны уничтожаться при выполнении того или иного условия. Например пуля столкнулась с объектом препятствием а значит она должна удалиться.
Добавлено через 5 минут Вообще всё это делаю не из головы, есть программа GM(Game Maker), так там есть простая функция для удаления объекта(экземпляра): instance_destroy() допустим ты создаёшь в этой программе объект пуля, в игре срабатывает условие в этом объекте которое запускает ту функцию и в результате объект удаляется.
0
|
|
|
|
||||||
| 02.11.2017, 19:00 | ||||||
0
|
||||||
|
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
|
|
| 02.11.2017, 19:03 [ТС] | |
|
Можете пояснить?
0
|
|
|
|
|
| 02.11.2017, 19:15 | |
|
А чего пояснять? Класс это сущность которая должна управлять только своим состоянием. Любой класс, в том числе круг знает лишь своё состояние, но не состояние своих хозяев, контейнеров, векторов.. Если другой большой какой-то класс или функция или даже функция мейн просто хранит вектор объектов этого круга, то она и должна добавлять|удалять элементы в этот вектор. Сам круг никак не должен знать, кто его хранит, это в не его уровня абстракции. Но зато он может проверять условие своего удаления!
Но опять таки проверять это условие лишь тогда и только тогда, когда его об этом хозяин спрашивает. 1. Хозяин попросил условие у круга 2. Круг ответил таки да 3. Хозяин попросил у вектора убить круг 4. Круг сдох, даже не зная, что всю жизнь прожил в векторе
0
|
|
| 02.11.2017, 19:23 | |
|
Не по теме: Вот и я о том же.
0
|
|
| 02.11.2017, 19:23 | |
|
Помогаю со студенческими работами здесь
40
объекты и классы Классы, объекты Классы и объекты КЛАССЫ И ОБЪЕКТЫ Классы и объекты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|