Die drei Elemente des Musters werden hauptsächlich durch einen Manager (
Code: Select all
EntityManagerIch habe auch eine Coordinator-Klasse in einer anderen .h-Datei erstellt, die Verweise auf Instanzen aller drei Managerklassen enthält, daher musste ich die Header-Datei der Manager in die Datei einschließen.
Der Systemmanager (naja, eigentlich die konkreten Systeme I implementieren musste) muss einen Verweis auf die Coordinator-Klasse haben, um die Komponente von anderen Entitäten zu erhalten. Daher muss auch die .h-Datei für ein generisches System die .h-Datei der Coordinator-Klasse enthalten, wodurch eine zirkuläre Header-Abhängigkeit entsteht.
Ich konnte es nicht mit einer einfachen Vorwärtsdeklaration lösen, da ich tatsächlich Methoden der Coordinator-Klasse aufrufen muss (die im Moment ein Singleton ist).
Der Fehler, den mir Visual Studio 2019 gibt, ist
"LNK2005-Fehler, ..., "bereits definiert in ...)
Gibt es eine Möglichkeit, das Problem zu lösen und dabei die beschriebene Struktur beizubehalten?
Vielen Dank im Voraus!
Coordinator.hpp
Code: Select all
#pragma once
#include "EntityManager.hpp"
#include "ComponentManager.hpp"
#include "SystemManager.hpp"
Code: Select all
#pragma once
#include "System.hpp"
Code: Select all
#pragma onceCode: Select all
#pragma once
#include "../Core/System.hpp"
class PhysicsSystem : public System
{
public:
void Update(float dt);
};
Code: Select all
#include "PhysicsSystem.hpp"
#include "../Core/Coordinator.hpp"
void PhysicsSystem::Update(float dt)
{
Coordinator* coordinator = Coordinator::GetInstance();
};
Mobile version