未完成的纯虚拟方法

unimplemented pure virtual method

本文关键字:方法 虚拟 未完成      更新时间:2023-10-16

我正在尝试实现从类算法到类似类的纯方法:

class Algorithm
{
    public:
        virtual void solve() = 0;
};
class BasicAlgo : public Algorithm
{
    public:
         void solve() { };
};
Algorithm a = BasicAlgo();
a.solve();

但是我遇到了这个错误:

variable type 'Algorithm' is an abstract class
    Algorithm a = BasicAlgo();
              ^
unimplemented pure virtual method 'solve' in 'Algorithm'
            virtual void solve() = 0;

在Stackoverflow上寻找解决方案之后,我仍然不太了解为什么出现错误。对我来说, a.solve()BasicAlgo::solve女巫。

c 不是java。

Algorithm a = BasicAlgo();

以上试图通过复制从 BasicAlgo初始化它来定义类型Algorithm对象。即使它是工作的(在这种情况下,由于禁止实例化 Algorithm对象的纯虚拟函数),您也只需将BasicAlgo对象切入Algorithm

出于您的目的,您需要指针或参考,例如:

std::unique_ptr<Algorithm> a = std::make_unique<BasicAlgo>();
a->solve();

Algorithm a = BasicAlgo();不允许进行多态性行为 - 实际上,如果类不是抽象的,您会遇到 slicing

您可以使用std::unique_ptr允许继承多态性:

std::unique_ptr<Algorithm> a = std::make_unique<BasicAlgo>();