Here's the class containing the templated objects:
class ResourceManager
{
public:
ResourceManager(DebugMenu& debugMenu);
private:
ResourceHolder<sf::Texture, Textures::Id> m_textureHolder;
ResourceHolder<sf::Font, Fonts::Id> m_fontHolder;
ResourceHolder<sf::SoundBuffer, SoundEffect::Id> m_soundBuffer;
};
And ResourceHolder.hpp (cut down significantly):
template <typename Resource, typename Identifier>
class ResourceHolder
{
public:
ResourceHolder(DebugMenu& debugMenu);
private:
DebugMenu* m_debugMenuContext;
};
Now what I'm trying to do is use an initializer list to pass the DebugMenu reference to all of the ResourceHolders (because they need it for the DebugMenu context). Like so:
ResourceManager::ResourceManager(DebugMenu& debugMenu) :
m_textureHolder(ResourceHolder<sf::Texture, Textures::Id>(debugMenu)),
m_fontHolder(ResourceHolder<sf::Font, Fonts::Id>(debugMenu)),
m_soundBuffer(ResourceHolder<sf::SoundBuffer, SoundEffect::Id>(debugMenu)) {}
But I'm getting an error for each initialization:
Undefined symbols for architecture x86_64:
"Shock::ResourceHolder<sf::SoundBuffer, Shock::SoundEffect::Id>::ResourceHolder(Shock::DebugMenu&)", referenced from:
Shock::ResourceManager::ResourceManager(Shock::DebugMenu&) in ResourceManager.o
"Shock::ResourceHolder<sf::Font, Shock::Fonts::Id>::ResourceHolder(Shock::DebugMenu&)", referenced from:
Shock::ResourceManager::ResourceManager(Shock::DebugMenu&) in ResourceManager.o
"Shock::ResourceHolder<sf::Texture, Shock::Textures::Id>::ResourceHolder(Shock::DebugMenu&)", referenced from:
Shock::ResourceManager::ResourceManager(Shock::DebugMenu&) in ResourceManager.o
ld: symbol(s) not found for architecture x86_64
I'm at a bit of a loss what the problem could be, so any help would be greatly appreciated. Thanks.