type_info尝试引用已删除的函数

时间:2015-12-13 23:08:43

标签: c++ c++11

我试图存储一组对象(所有对象都从基础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;
        }
    };
}

我唯一能想到的是这与结构有关,但我找不到任何证实这一点的东西。有什么想法吗?

1 个答案:

答案 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);

你应该没事。