我试图存储一组对象(所有对象都从基础acorn::Component
继承)。
但是,在我的AddComponent
函数中,我一直收到此错误:
error C2280: 'type_info::type_info(const type_info &)' : attempting to reference a deleted function
我不确定为什么会收到此错误,因为我的Component
类或存储所有Component
个对象的类中没有任何已删除的函数。
这是给我带来问题的功能。它应该将Component
添加到地图中:
template<typename T>
void AddComponent(T* component)
{
#ifdef _DEBUG
SDL_Log("acorn::Entity::AddComponent called!");
#endif
std::pair<std::type_index, acorn::Component*> myPair = std::make_pair(typeid(T), component);
mComponentMap.insert(myPair);
}
以下是组件类:
namespace acorn
{
struct Component
{
};
struct PositionComponent : public acorn::Component
{
SDL_Rect positionRect;
float x;
float y;
uint32_t ID;
PositionComponent() : x(0.0f), y(0.0f), ID(0)
{
}
};
struct VelocityComponent : public acorn::Component
{
float xVel;
float yVel;
uint32_t ID;
VelocityComponent() : xVel(0.0f), yVel(0.0f), ID(1)
{
}
};
struct SpriteComponent : public acorn::Component
{
SDL_Rect spriteRect;
SDL_Texture* sprite;
uint32_t ID;
SpriteComponent() : ID(0)
{
spriteRect.x = 0;
spriteRect.y = 0;
spriteRect.h = 32;
spriteRect.w = 32;
sprite = nullptr;
}
};
}
我唯一能想到的是这与结构有关,但我找不到任何证实这一点的东西。有什么想法吗?
答案 0 :(得分:2)
make_pair
无法使用不可复制的类型,因为它会创建一个新的对prvalue。
替换
std::pair<std::type_index, acorn::Component*> myPair = std::make_pair(typeid(T), component);
带
std::pair<std::type_index, acorn::Component*> myPair(typeid(T), component);
你应该没事。