|
0 / 0 / 0
Регистрация: 02.11.2023
Сообщений: 22
|
||||||||||||||||
Создание системы инвентаря-проблема с цикличным включением заголовочных файлов02.11.2023, 22:16. Показов 719. Ответов 4
Начну с очевидного, я новичок в С++, совсем недавно освоил самую базу и многие вещи, которые я написал в коде, возможно могут показаться глупыми или странными (я возможно даже знаю что).
Вообщем, хотел я сделать небольшую игрушку по типу Зельды на SFML. Я хотел реализовать там более сложную систему инвентаря и большое разнообразие предметов, поэтому создал специальный класс Item. От Item наследуется абстрактный класс Potion (зелья), а уже от него все классы разных зелий (да, у каждого зелья есть свой класс). Я не знаю приемлемо ли так писать или нет, но лично для меня это выглядит странно, создавать целый класс для одного зелья, но я все равно решил оставить как есть, но столкнулся с проблемой цикличного включения заголовочных файлов. У меня есть два класса, Item и Player. Идея заключалась в том, что бы создать массив объектов Item в классе Player, что как бы и являлось инвентарем. Для этого мне пришлось подключить в Player.h заголовок Item.h. В Potion есть виртуальная функция Use, которую должны переопределять все последующие классы зелий наследуемые от него. Они должны менять характеристики Player и для этого я подключил уже Player.h в Item.h. ТУТ И ПОЯВЛЯЕТСЯ ЭТА ОШИБКА! Ошибка C3646 Inventory: неизвестный спецификатор переопределения Уже не знаю то делать, видел какой то похожий вопрос на форуме, но то ли я слишком тупой, что если появляется больше 10 строчек кода, то я уже не понимаю что там происходит, то ли это немного не тот случай, тк там подключались не заголовочные файлы, а сразу cpp.(я не уверен, что там есть разница) Это ошибка встречается мне не в первый раз, но я всегда пытался ее обойти какими нибудь всратыми костылями. Я максимально упростил код и убрал все лишнее, не могли бы вы мне объяснить, как сделать так, "что бы работало"... Player.h
0
|
||||||||||||||||
| 02.11.2023, 22:16 | |
|
Ответы с готовыми решениями:
4
Создание и использование заголовочных файлов |
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||
| 02.11.2023, 23:04 | ||
![]() У тебя неправильная структура классов. Если Player владеет Item'ами, то он ими и управляет, а не наоборот. И если там просто массив, то полиморфизм бесполезен.
1
|
||
|
0 / 0 / 0
Регистрация: 02.11.2023
Сообщений: 22
|
|
| 02.11.2023, 23:17 [ТС] | |
|
На счет планов, я говорил о самой первой зелде (на nes).
Я попробую изменить логику, но не могли бы объяснить как вообще избежать такой ошибки? Я думал что проблему повторного включения решает #pragma once...
0
|
|
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
|||||||||||||||||||
| 02.11.2023, 23:29 | |||||||||||||||||||
Сообщение было отмечено Rekava как решение
Решение
#include "Item.h"
1
|
|||||||||||||||||||
|
0 / 0 / 0
Регистрация: 02.11.2023
Сообщений: 22
|
|
| 02.11.2023, 23:34 [ТС] | |
|
Спасибо!
0
|
|
| 02.11.2023, 23:34 | |
|
Помогаю со студенческими работами здесь
5
Создание иерархии заголовочных файлов Про добавление заголовочных файлов в заголовочных файлах
Раздельная компиляция (нюансы использования заголовочных файлов и файлов реализации) Выложите пожалуйста простейший пример содания файлов описания и заголовочных файлов с дальнейшим их подключением. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|