Я знаю, что есть похожие вопросы, но ни один из них не помог мне, потому что у меня не только проблема двойного включения, но я также должен ее использовать
Что я пытаюсь сказать здесь у меня есть два заголовочных файла: entity.h entity_Handler.h файл сущностей имеет такие вещи, как функция обновления и рендеринга, например, у обработчика сущностей есть вектор, который хранит все сущности и вызывает обновление и рендеринг для каждого из них
теперь я попытался использовать объявление класса forward, но оно не работает, потому что мне нужно не только объявление, но и вызов функций:
(entity.h вызывает вектор из entity_Handler.h для сохранения объекта) (entity_Handler.h вызывает метод Update и render из entity.h)
Примечание: entity_Handler.h - это класс синглтона
, это код: (на всякий случай, если вы нужно взглянуть)
Entity.h:
#pragma once
#include <SFML/Graphics.hpp>
#include "Entity_Handler.h"
class Entity
{
private:
Entity_Handler *m_Handler;
sf::Vector2f m_size;
sf::Color m_color;
public:
Entity(sf::Vector2f size,sf::Color color);
~Entity();
void AddToList(); // in this function this entity will be added to the vector of entities
void Update();
void Render();
};
Entity. cpp:
#include "headers/Entity.h"
Entity::Entity(sf::Vector2f size, sf::Color color)
: m_size(size),m_color(color)
{
AddToList();
}
Entity::~Entity()
{
}
void Entity::AddToList()
{
std::vector<Entity*> entityVector = Entity_Handler::init().getEntityVector();
entityVector.push_back(this);
}
void Entity::Update()
{
}
void Entity::Render()
{
}
entity_Handler.h:
#pragma once
#include <vector>
#include "Entity.h"
class Entity_Handler // singlton
{
private:
Entity_Handler();
~Entity_Handler();
static std::vector<Entity*> S_m_entities;
static Entity_Handler S_m_Handler;
public:
static Entity_Handler &init();
std::vector<Entity*> getEntityVector();
void Update();
void Render();
};
* * entities_Handler тысячи двадцать-одны. * 10 27 *:
#include "headers/Entity_Handler.h"
Entity_Handler Entity_Handler::S_m_Handler;
std::vector<Entity*> Entity_Handler::S_m_entities;
Entity_Handler::Entity_Handler()
{
}
Entity_Handler::~Entity_Handler()
{
S_m_entities.clear();
}
Entity_Handler& Entity_Handler::init()
{
return S_m_Handler;
}
std::vector<Entity*> Entity_Handler::getEntityVector()
{
return S_m_entities;
}
void Entity_Handler::Update()
{
for(Entity *e : S_m_entities)
{
e->Update();
}
}
void Entity_Handler::Render()
{
for (Entity *e : S_m_entities)
{
e->Render();
}
}
как мне разрешить вызывать функции каждого класса внутри другого?