C++ C2259:&x27;ID3D11ShaderResourceView';无法实例化抽象类-DX11

C++ C2259:&x27;ID3D11ShaderResourceView';无法实例化抽象类-DX11,c++,directx,directx-11,C++,Directx,Directx 11,我正在尝试制作一个纹理处理程序,这样我可以从文本文件中加载纹理文件名,然后加载纹理并将其存储到向量中,并在需要绘制时获取它们 问题是,我得到了C2259错误,它在编译之前就中断了,我想知道是否有人能帮我解决这个问题 纹理管理器 class TextureManager{ private: std::vector<ID3D11ShaderResourceView> * textures; public: TextureManager(); ~TextureMan

我正在尝试制作一个纹理处理程序,这样我可以从文本文件中加载纹理文件名,然后加载纹理并将其存储到向量中,并在需要绘制时获取它们

问题是,我得到了C2259错误,它在编译之前就中断了,我想知道是否有人能帮我解决这个问题

纹理管理器

class TextureManager{
private:
    std::vector<ID3D11ShaderResourceView> * textures;
public:
    TextureManager();
    ~TextureManager();
    void TMLoadTexture(ID3D11Device* d);
    ID3D11ShaderResourceView * TMgetTexture(int index);
};
类纹理管理器{
私人:
std::vector*纹理;
公众:
纹理管理器();
~TextureManager();
void TMLoadTexture(ID3D11Device*d);
ID3D11ShaderResourceView*TMgetTexture(int索引);
};
TextureManager.cpp-TMLoadTexture/TMGetTexture

void TextureManager::TMLoadTexture(ID3D11Device* d)
{
    std::vector<std::string> files;
    files = readFile("textures");

    D3DX11_IMAGE_LOAD_INFO loadInfo;
    ZeroMemory(&loadInfo, sizeof(D3DX11_IMAGE_LOAD_INFO));
    loadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE;
    loadInfo.Format = DXGI_FORMAT_BC1_UNORM;

for(int i = 0; i < files.size(); i++)
{
    std::wstring stemp = std::wstring(files.at(i).begin(), files.at(i).end());
    LPCWSTR sw = stemp.c_str();

    ID3D11ShaderResourceView* temp;
    D3DX11CreateShaderResourceViewFromFile(d, sw, &loadInfo, NULL, &temp, NULL);
    textures->push_back(*temp);
    delete temp;
}
}

ID3D11ShaderResourceView * TextureManager::TMgetTexture(int index)
{
    return &textures->at(index);
}
void TextureManager::TMLoadTexture(ID3D11Device*d)
{
std::矢量文件;
文件=读取文件(“纹理”);
D3DX11_图像_加载_信息加载信息;
零内存(&loadInfo,sizeof(D3DX11_IMAGE_LOAD_INFO));
loadInfo.BindFlags=D3D11\u BIND\u SHADER\u资源;
loadInfo.Format=DXGI\u Format\u BC1\u UNORM;
对于(int i=0;i向后推(*temp);
删除临时文件;
}
}
ID3D11ShaderResourceView*TextureManager::TMgetTexture(int索引)
{
返回&纹理->at(索引);
}

谢谢:)

由于
ID3D11ShaderResourceView
是一个接口,因此必须使用指针访问此类对象。因此:

std::vector<ID3D11ShaderResourceView*> * textures;

不要删除刚创建的纹理。

谢谢,在std::vector textures中使用它;如果您使用向量作为对象成员,并且不知道COM指针是如何工作的,那么您需要了解所有这些。我觉得你会漏掉很多记忆。此指针需要在
~destruct
时或
重用时释放。在这种情况下,加指针属性没有意义,因此需要了解C++对象是如何创建、销毁的以及指针如何工作的。否则。。。不会很漂亮的。因此,为COM指针使用COM包装器是安全的。
textures.push_back(temp);