std::make_shared an interface?



我有一个继承自iccomponent的Component类。这个函数将一个组件与另一个组件连接起来。

void Component::link(IComponent &other)
{
components->setRef(std::make_shared<IComponent>(other));
}

当我编译我的程序时,我有这个错误:

error: invalid new-expression of abstract class type ‘IComponent’

我该如何解决这个问题?

PS:我知道我不能实例化一个接口,因为她包含纯虚函数,但我不知道如何避免这个问题

您在这里要做的事情非常不清楚。"setRef()";听起来它的参数是一个引用,如果是这样的话,你不需要对(智能)指针做任何事情。你至少应该展示这个方法的原型。

如上所述,如果你想"制作一个副本";other"你应该通过"克隆"来做到这一点。接口,例如:create virtual " iccomponent * iccomponent::clone()"方法,并在Component中正确地实现它。如果是有保证的,其他的也可以是一个对Component的引用,你可以强制转换和复制构造这个新实例(但你的老师不太可能希望你这么做)。

相关内容

最新更新