c ++ 2 заголовки, которые «должны» включать друг друга - PullRequest
0 голосов
/ 26 апреля 2020

Я знаю, что есть похожие вопросы, но ни один из них не помог мне, потому что у меня не только проблема двойного включения, но я также должен ее использовать

Что я пытаюсь сказать здесь у меня есть два заголовочных файла: 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();
}
}

как мне разрешить вызывать функции каждого класса внутри другого?

...