Я пытаюсь реализовать шаблон ECS для видеоигры на C++.
Три элемента шаблона в основном представлены менеджером (EntityManager, ComponentManager, System Manager), которые определены и реализованы в трех разных файлах .h (из-за использования шаблона).
Я также создал класс координатора в другом .h файле, который имеет ссылки на экземпляры всех трех классов менеджеров, поэтому мне пришлось включить в него заголовочный файл менеджеров.
Системный менеджер (ну, на самом деле конкретные системы, которые у меня были для реализации) должен иметь ссылку на класс Координатора, чтобы получить компонент из других объектов. Следовательно, файл .h для общей системы также должен включать .h класса Координатора, создавая тем самым циклическую зависимость заголовка.
Я не смог решить эту проблему с помощью простого предварительного объявления, поскольку мне нужно фактически вызывать методы класса Координатора (который на данный момент является синглтоном).
Ошибка, которую выдает Visual Studio 2019:
"Ошибка LNK2005, ...," уже определена в ...)
Есть ли способ решить эту проблему, сохранив описанную структуру?
Заранее спасибо!
Coordinator.hpp
#pragma once
#include "EntityManager.hpp"
#include "ComponentManager.hpp"
#include "SystemManager.hpp"
SystemManager.hpp
#pragma once
#include "System.hpp"
System.hpp
#pragma once
PhysicsSystem.hpp
#pragma once
#include "../Core/System.hpp"
class PhysicsSystem : public System
{
public:
void Update(float dt);
};
PhysicsSystem.cpp
#include "PhysicsSystem.hpp"
#include "../Core/Coordinator.hpp"
void PhysicsSystem::Update(float dt)
{
Coordinator* coordinator = Coordinator::GetInstance();
};
Подробнее здесь: https://stackoverflow.com/questions/775 ... ncy-in-ecs
Зависимость циклического заголовка в ECS ⇐ C++
Программы на C++. Форум разработчиков
1761855910
Anonymous
Я пытаюсь реализовать шаблон ECS для видеоигры на C++.
Три элемента шаблона в основном представлены менеджером (EntityManager, ComponentManager, System Manager), которые определены и реализованы в трех разных файлах .h (из-за использования шаблона).
Я также создал класс координатора в другом .h файле, который имеет ссылки на экземпляры всех трех классов менеджеров, поэтому мне пришлось включить в него заголовочный файл менеджеров.
Системный менеджер (ну, на самом деле конкретные системы, которые у меня были для реализации) должен иметь ссылку на класс Координатора, чтобы получить компонент из других объектов. Следовательно, файл .h для общей системы также должен включать .h класса Координатора, создавая тем самым циклическую зависимость заголовка.
Я не смог решить эту проблему с помощью простого предварительного объявления, поскольку мне нужно фактически вызывать методы класса Координатора (который на данный момент является синглтоном).
Ошибка, которую выдает Visual Studio 2019:
"Ошибка LNK2005, ...," уже определена в ...)
Есть ли способ решить эту проблему, сохранив описанную структуру?
Заранее спасибо!
[b]Coordinator.hpp[/b]
#pragma once
#include "EntityManager.hpp"
#include "ComponentManager.hpp"
#include "SystemManager.hpp"
[b]SystemManager.hpp[/b]
#pragma once
#include "System.hpp"
[b]System.hpp[/b]
#pragma once
[b]PhysicsSystem.hpp[/b]
#pragma once
#include "../Core/System.hpp"
class PhysicsSystem : public System
{
public:
void Update(float dt);
};
[b]PhysicsSystem.cpp[/b]
#include "PhysicsSystem.hpp"
#include "../Core/Coordinator.hpp"
void PhysicsSystem::Update(float dt)
{
Coordinator* coordinator = Coordinator::GetInstance();
};
Подробнее здесь: [url]https://stackoverflow.com/questions/77556394/circular-header-dependency-in-ecs[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия