【发布时间】:2021-06-05 17:11:18
【问题描述】:
我有一个继承自 IComponent 的 Component 类。该函数将一个组件与另一个组件链接起来。
void Component::link(IComponent &other)
{
components->setRef(std::make_shared<IComponent>(other));
}
当我编译我的程序时出现这个错误:
error: invalid new-expression of abstract class type ‘IComponent’
我该如何解决这个问题?
PS:我知道我不能实例化一个接口,因为她包含纯虚函数,但我不知道如何避免这个问题
【问题讨论】:
-
make_shared创建一个对象的新实例,这不是你想要的。Component::link应该接收shared_ptr<IComponent>作为参数。 -
other来自哪里?您的意思是将其所有权转让给shared_ptr?如果是这样,将其通过右值 ref 直接传递给setRef。 -
我明白了,但是我的老师正在强加函数的原型
-
通常你会在你的接口中添加一个纯虚拟的
clone方法并在派生类中实现它 -
感谢它的工作!