Zirkuläre Header-Abhängigkeit in ECSC++

Programme in C++. Entwicklerforum
Anonymous
 Zirkuläre Header-Abhängigkeit in ECS

Post by Anonymous »

Ich versuche, ein ECS-Muster für ein Videospiel in C++ zu implementieren.
Die drei Elemente des Musters werden hauptsächlich durch einen Manager (

Code: Select all

EntityManager
, ComponentManager, System Manager), die in drei verschiedenen .h-Dateien definiert und implementiert sind (aufgrund der Verwendung einer Vorlage).
Ich 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"
SystemManager.hpp

Code: Select all

#pragma once

#include "System.hpp"
System.hpp

Code: Select all

#pragma once
PhysicsSystem.hpp

Code: Select all

#pragma once

#include "../Core/System.hpp"

class PhysicsSystem : public System
{
public:
void Update(float dt);
};
PhysicsSystem.cpp

Code: Select all

#include "PhysicsSystem.hpp"
#include "../Core/Coordinator.hpp"

void PhysicsSystem::Update(float dt)
{
Coordinator* coordinator = Coordinator::GetInstance();
};

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post