I searched around the web but I haven't found an answer yet, as to why I get this error:
Error 1 error LNK2019: unresolved external symbol "public: class Mesh * __thiscall AssetManager::GetAsset(class std::basic_string,class std::allocator >)" (??$GetAsset@PAVMesh@@@AssetManager@@QAEPAVMesh@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: void __thiscall SceneManager::AddMesh(class std::basic_string,class std::allocator >)" (?AddMesh@SceneManager@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) C:\Users\Dirk\documents\visual studio 2010\Projects\OpenGameEngine\OpenGameEngine\SceneManager.obj
Here is my code:
AssetManager.h
#pragma once
#include <string>
#include <map>
#include "Asset.h"
#include "Mesh.h"
using namespace std;
class AssetManager
{
public:
AssetManager(string rootFolder);
bool LoadAsset(string assetName, int assetType, string assetFile, bool subDirectory);
void UnloadAsset(string assetName);
template <class T> T GetAsset(string assetName);
bool AddAssetSubDirectory(int assetType, string subDirectory);
private:
string m_rootFolder;
map<int, string> m_assetSubs;
map<string, Asset*> m_assets;
};
AssetManager.cpp
#include "AssetManager.h"
AssetManager::AssetManager(string rootFolder)
{
m_rootFolder = rootFolder;
}
bool AssetManager::AddAssetSubDirectory(int assetType, string subDirectory)
{
if (m_assetSubs.find(assetType) == m_assetSubs.end())
{
m_assetSubs[assetType] = subDirectory;
return true;
}
else
{
return false;
}
}
bool AssetManager::LoadAsset(string assetName, int type, string assetFile, bool subDirectory)
{
string filePos;
if (subDirectory)
{
filePos = m_rootFolder.append(m_assetSubs[type]).append(assetFile);
}
else
{
filePos = m_rootFolder.append(assetFile);
}
return true;
}
void AssetManager::UnloadAsset(string assetName)
{
if (m_assets.find(assetName) != m_assets.end())
{
m_assets.erase(assetName);
}
}
template <class T> T AssetManager::GetAsset(string assetName)
{
if (m_assets.find(assetName) != m_assets.end())
{
return m_assets[assetName];
}
else
{
return null;
}
}
SceneManager.h
#pragma once
#include <string>
#include <map>
#include "AssetManager.h"
using namespace std;
class SceneManager
{
public:
static SceneManager* Instance();
void AddMesh(string assetName);
void RemoveMesh(string assetName);
void Draw();
void Run();
void SetAssetManager(AssetManager*);
void Destroy();
private:
SceneManager();
SceneManager(SceneManager const&);
~SceneManager();
SceneManager& operator=(SceneManager const&){};
static SceneManager* m_Instance;
AssetManager *m_assetMgr;
private:
map<string, Mesh*> m_staticMeshes;
};
SceneManager.cpp
#include "SceneManager.h"
#include "AssetManager.h"
SceneManager* SceneManager::m_Instance = NULL;
SceneManager::SceneManager()
{
m_assetMgr = 0;
}
SceneManager::SceneManager(SceneManager const&)
{
}
SceneManager::~SceneManager()
{
delete m_assetMgr;
m_assetMgr = 0;
}
void SceneManager::Destroy()
{
delete m_Instance;
m_Instance = 0;
}
SceneManager* SceneManager::Instance()
{
if (!m_Instance)
m_Instance = new SceneManager();
return m_Instance;
}
void SceneManager::SetAssetManager(AssetManager *am)
{
m_assetMgr = am;
}
void SceneManager::AddMesh(string assetName)
{
m_assetMgr->GetAsset<Mesh*>(assetName);
}
void SceneManager::RemoveMesh(string assetName)
{
if (m_staticMeshes.find(assetName) != m_staticMeshes.end())
{
m_staticMeshes.erase(assetName);
}
}
void SceneManager::Draw()
{
for (map<string, Mesh*>::Iterator it = m_staticMeshes.begin(); it != m_staticMeshes.end(); ++it)
{
it->second->Draw();
}
}
void SceneManager::Run()
{
}
Thanks in advance for the responses!