XMemory0, ошибка XUtility 2280 Попытка ссылки на удаленную функцию - PullRequest
0 голосов
/ 22 апреля 2020

Я следовал руководству и использовал следующие фрагменты кода, получая следующие ошибки:

Error C2280 'std::unique_ptr<Component,std::default_delete<_Ty>> &std::unique_ptr<_Ty,std::default_delete<_Ty>>::operator =(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': attempting to reference a deleted function EngineTest01 c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\xutility 2414 ошибка показывает 3x

Error C2280 'std::unique_ptr<Component,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': attempting to reference a deleted function EngineTest01 c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\xmemory0 881 ошибка показывает 2x

Кажется, они оба ссылаются на std :: unique_ptr, и я впервые использую unique_ptr, поэтому я не совсем уверен, почему компилятор возвращает эту ошибку.

{
private:
    bool active = true;
    std::vector < std::unique_ptr<Component>> components;

    ComponentArray componentArray;
    ComponentBitSet componentBitSet;
public:
    template <typename T, typename... TArgs> T& AddComponent(TArgs&&... mArgs)
    {
        T* c(new T(std::forward<TArgs>(mArgs)...));
        c->entity = this;
        std::unique_ptr<Component> uPtr{ c };
        components.emplace_back(std::move(uPtr));

        componentArray[getComponentTypeID<T>()] = c;
        componentBitSet[getComponentTypeID<T>()] = true; 

        c->init();
        return *c;
    }
};
class Manager
{
private:
    std::vector<std::unique_ptr<Entity>> entities;

public:
    void Update()
    {
        for (auto& e : entities) { e->update(); }
    }
    void Draw()
    {
        for (auto& e : entities) { e->draw(); }
    }

    void Refresh()
    {
        entities.erase(std::remove_if(std::begin(entities), std::end(entities), [](const std::unique_ptr<Entity> &mEntity)
        {
            return !mEntity->isActive();
        }),
            std::end(entities));
    }

    Entity& AddEntity()
    {
        Entity *e = new Entity();
        std::unique_ptr<Entity> uPtr{ e };
        entities.emplace_back(std::move(uPtr));
        return *e;
    }
};

Если кто-нибудь мог бы помочь мне решить проблему и объяснить, почему эта проблема возникает, я был бы очень признателен.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...