Непонятная ошибка в списке инициализаторов при использовании std :: move on unique_pointers

Я получаю эту ошибку от этого конструктора

Код серьезности Описание Ошибка состояния подавления строки файла проекта
(active) E0289 no instance of constructor "std::unique_ptr<_Ty,
_Dx>::unique_ptr [with _Ty=InputComponent, _Dx=std::default_delete<InputComponent>]" matches the argument list

Код:

    class GameWorldObject
{
public:

GameWorldObject::GameWorldObject(std::unique_ptr<GraphicsComponent> graphicsComponent, std::unique_ptr<LogicComponent> logicComponent, std::unique_ptr<InputComponent> inputComponent)
:
m_graphicsComponent( std::move(graphicsComponent) ), // ERROR
m_inputComponent( std::move(logicComponent) ), // ERROR
m_logicComponent( std::move(inputComponent) ) // ERROR
{}// these auto initialize to null
std::unique_ptr<GraphicsComponent> m_graphicsComponent;
std::unique_ptr<LogicComponent> m_logicComponent;
std::unique_ptr<InputComponent> m_inputComponent;

};

Я тупо застрял, потому что этот пример работает для меня и кажется идентичным предыдущему:

    struct Animal {
virtual ~Animal() {}
virtual void speak() = 0;
};struct Dog : Animal {
void speak() override { std::cout << "Woof!\n"; }
};

std::unique_ptr<Animal> createPet() {
return std::make_unique<Dog>();

}

class House {
public:
House(std::unique_ptr<Animal> pet) // seems identical
:
m_pet(std::move(pet)) // seems identical
{}

std::unique_ptr<Animal> m_pet; // seems identical
};

void main()
{

auto pet = createPet(6.0);
pet->speak();

House house(std::move(pet));

//pet->speak(); err pet is nullptr
house.m_pet->speak();
}

Какая разница между этими двумя?
Почему верхний не работает?

Примечание. Я не реализовал конструктор, деструктор или конструктор копирования в InputComponent, GraphicsComponent, или же LogicComponent,

На самом деле это InputComponent

class InputComponent
{

};

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]