0

Hi there, I'm encountering an error when I'm trying to make a EntityManager for an Entity class. My problem arises when I'm trying to return the second value of a map (data). Here's my code:

EntityManager.hpp:

#include <iostream>
#include <SFML/Graphics.hpp>
#include <map>
#include <memory>

#include "CEntity.hpp"

class CEntityManager
{
public:
    CEntityManager();
    ~CEntityManager();

    void createEntity(const std::string&, CEntity::Entity_Type);
    void deleteEntity(const std::string&);

    std::unique_ptr<CEntity> operator() (const std::string&);

private:
    std::map<std::string, std::unique_ptr<CEntity> > m_entities;
};

EntityManager.cpp:

#include "CEntityManager.hpp"

CEntityManager::CEntityManager()
{
    m_entities.clear();
}

CEntityManager::~CEntityManager()
{
    m_entities.clear();
}

void CEntityManager::createEntity(const std::string& id, CEntity::Entity_Type type)
{
    std::unique_ptr<CEntity> tempEntity(new CEntity(type));

    m_entities[id] = std::move(tempEntity);

    std::cout << "Successfully created entity called " << id << "!" << std::endl;
}

void CEntityManager::deleteEntity(const std::string& id)
{
    auto temp = m_entities.find(id);

    if (temp != m_entities.end())
    {
        m_entities.erase(temp);

        std::cout << "Successfully deleted entity with id " << id << "!" << std::endl;
    }

    else
        std::cout << "Error locating entity with id " << id << "." << std::endl;
}

std::unique_ptr<CEntity> CEntityManager::operator() (const std::string& id)
{
    auto temp = m_entities.find(id);

    if (temp != m_entities.end())
    {
        std::cout << "Successfully found entity with id " << id << "!" << std::endl;
        return temp->second;
    }

    else
    {
        std::cout << "Error locating entity with id " << id << "." << std::endl;
        return nullptr;
    }
}

My problem arises right at the return temp->second in the overloaded operator. Thanks to all who help.

1
Contributor
1
Reply
7
Views
4 Years
Discussion Span
Last Post by Terminator1337
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.