0
我试图存储对象的集合(所有从基地acorn::Component
继承)。 然而,在我AddComponent
功能,我不断收到此错误:TYPE_INFO试图引用删除功能
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;
}
};
}
我能想到的唯一的事情是,这已经是与结构,但我可以没有发现任何证实这一点的事情。有任何想法吗?
不应该自动生成复制和移动构造函数,因为我没有自己定义它们? – Acorn
@Acorn:类型信息类型(表达式typeid(T)')的类型不可复制,因此对拷贝构造函数被删除。 –
[Demo](http://coliru.stacked-crooked.com/a/848478fe24435b40)。 –