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
这是我的代码:
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,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() { }
在此先感谢您的回复!
解决方法
原文地址:https://www.jb51.cc/c/116856.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。