so im having a bit of problem with my ResourceManager class for a game im working on with c++. so i tried to make a template function out of my regular addImage function so it will add sounds too but i got some errors which i cant really handle can you guys help me? :D
.hpp
#ifndef RESOURCE_MANAGER_HPP
#define RESOURCE_MANAGER_HPP
#include "Image页: 1"
#include "SoundBuffer页: 1"
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
typedef std::map<std::string, sz::Image*> ImagesContainer;
typedef std::map<std::string, sz::Image*>::iterator ImagesContainerIt;
typedef std::map<std::string, sz::SoundBuffer*> SoundsContainer;
typedef std::map<std::string, sz::SoundBuffer*>::iterator SoundsContainerIt;
typedef std::map<std::string, sf::Music*> MusicContainer;
typedef std::map<std::string, sf::Music*>::iterator MusicContainerIt;
namespace sz
{
// meanwhile this class is only for images, need to edit later for
// it to be also able to load sounds, etc...
class ResourceManager{
private:
ResourceManager() {};
ResourceManager(ResourceManager const&) {};
static ResourceManager *rm;
// add functions and variables here
ImagesContainer imagesContainer;
SoundsContainer soundsContainer;
MusicContainer musicContainer;
template <class type>
void AddNew(std::string imagePath);
public:
static ResourceManager *Instance();
// add functions here
template <class type>
type *Get(std::string imagePath);
};
}
#endif
页: 1
#include "ResourceManager.hpp"
#include <typeinfo>
namespace sz
{
ResourceManager *ResourceManager::rm = NULL;
ResourceManager *ResourceManager::Instance()
{
if (!rm)
rm = new ResourceManager;
return rm;
}
template <class type>
void ResourceManager::AddNew(std::string filePath)
{
type *item = new type(filePath);
if(typeid(type) == typeid(sz::Image))
imagesContainer[filePath] = item;
else if(typeid(type) == typeid(sz::SoundBuffer))
soundsContainer[filePath] = item;
else
return;
}
template <class type>
type *ResourceManager::Get(std::string filePath)
{
if(typeid(type) == typeid(sz::Image))
{
ImagesContainerIt it = imagesContainer.find(filePath);
if(it == imagesContainer.end())
{
AddNew<type>(filePath);
}
it = imagesContainer.find(filePath);
return it->second;
}
else if(typeid(type) == typeid(sz::SoundBuffer))
{
SoundsContainerIt it = soundsContainer.find(filePath);
if(it == soundsContainer.end())
{
AddNew<type>(filePath);
}
it = soundsContainer.find(filePath);
return it->second;
}
else
return NULL;
}
}
the errors @_@
g++ -Wall -c "Sprite页: 1" (in directory: /home/gannash/Desktop/Open Heroes/Engine)
In file included from Sprite页: 1:2:0:
ResourceManager页: 1: In member function ‘type* sz::ResourceManager::Get(std::string) [with type = sz::Image, std::string = std::basic_string<char>]’:
Sprite页: 1:10:65: instantiated from here
ResourceManager页: 1:50:15: error: cannot convert ‘sz::SoundBuffer*’ to ‘sz::Image*’ in return
ResourceManager页: 1: In member function ‘void sz::ResourceManager::AddNew(std::string) [with type = sz::Image, std::string = std::basic_string<char>]’:
ResourceManager页: 1:36:5: instantiated from ‘type* sz::ResourceManager::Get(std::string) [with type = sz::Image, std::string = std::basic_string<char>]’
Sprite页: 1:10:65: instantiated from here
ResourceManager页: 1:23:4: error: cannot convert ‘sz::Image*’ to ‘std::map<std::basic_string<char>, sz::SoundBuffer*>::mapped_type {aka sz::SoundBuffer*}’ in assignment
ResourceManager页: 1: In member function ‘type* sz::ResourceManager::Get(std::string) [with type = sz::Image, std::string = std::basic_string<char>]’:
ResourceManager页: 1:55:2: warning: control reaches end of non-void function [-Wreturn-type]
Compilation failed.