我目前使用C++與Direct3D,並試圖改變我的資產存儲。C++ std :: map字符串指針
現在我的資產被存儲爲「vector textureList」並且使用枚舉定義獲得。
我想通過使用STL地圖類來使類更加開放。不過,我從來沒有使用過這門課,而且我遇到了我只是不明白的問題。
我剛纔做任何事情都很裸機測試,目前有以下幾種:
#include <d3d9.h>
#include <d3dx9.h>
#include <map>
#include <string>
#pragma comment (lib, "d3d9.lib")
#pragma comment (lib, "d3dx9.lib")
using namespace std;
class Assets
{
private:
typedef std::map<string, IDirect3DTexture9*> TexMap;
TexMap textureList;
public:
IDirect3DTexture9* LoadTexture(IDirect3DDevice9* pd3dDevice, LPCWSTR file, string key)
{
//load a texture from file
IDirect3DTexture9* tex;
//D3DXCreateTextureFromFile(pd3dDevice, file, &tex);
D3DXCreateTextureFromFileEx(pd3dDevice, file, 512, 512, 0, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0xFF000000, NULL, NULL, &tex);
//store the loaded texture to a vector array
textureList.insert(TexMap::value_type(key, tex));
return S_OK;
}
}
當我試圖運行此我得到一個「調試斷言失敗」錯誤與表達「圖/套迭代器不兼容「
我只是覺得我已經在代碼中儘可能簡化了代碼,並且仍然無法從類似的例子中看到錯誤。正是如此它只是使用int,我仍然得到同樣的錯誤
#include <d3d9.h>
#include <d3dx9.h>
#include <map>
#include <string>
#pragma comment (lib, "d3d9.lib")
#pragma comment (lib, "d3dx9.lib")
using namespace std;
class Assets
{
private:
typedef std::map<int, int> TexMap;
TexMap textureList;
public:
IDirect3DTexture9* LoadTexture(IDirect3DDevice9* pd3dDevice, LPCWSTR file, string key)
{
//load a texture from file
IDirect3DTexture9* tex;
//D3DXCreateTextureFromFile(pd3dDevice, file, &tex);
D3DXCreateTextureFromFileEx(pd3dDevice, file, 512, 512, 0, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0xFF000000, NULL, NULL, &tex);
//store the loaded texture to a vector array
//textureList.push_back(tex);
textureList.insert(TexMap::value_type(3, 4));
return S_OK;
}
}
:
我也運行的代碼。
什麼是調用代碼?那裏沒有「主」。我的猜測是你在某個地方使迭代器無效。 – netcoder 2012-08-08 19:33:43
是的,目前主要功能加載場景管理器,場景管理器創建資產類別。我會將主要和任何相關部分的代碼添加到第一篇文章中。迭代器如何失效? – user1539405 2012-08-08 20:08:52
請參閱[迭代器失效規則](http://stackoverflow.com/questions/6438086/iterator-invalidation-rules)。 – netcoder 2012-08-08 20:11:45