Я следовал руководству и использовал следующие фрагменты кода, получая следующие ошибки:
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;
}
};
Если кто-нибудь мог бы помочь мне решить проблему и объяснить, почему эта проблема возникает, я был бы очень признателен.
Заранее спасибо!