新闻资讯

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻资讯列表

​C++报pure virtual function call错误怎么解决

发布时间:2023-11-02 13:37:24

​C++报pure virtual function call毛病怎样解决

C++中的pure virtual function call毛病通常是由于没有为纯虚函数提供实现致使的。纯虚函数是一个没有定义的函数,只有声明的接口。在派生类中,一定要为纯虚函数提供具体的实现。以下是解决此毛病的几种方法:

  1. 为纯虚函数提供实现:在派生类中实现纯虚函数的具体逻辑。例如:
class Base {
public:
    virtual void foo() = 0; // 纯虚函数
};

class Derived : public Base {
public:
    void foo() override {
        // 实现具体逻辑
    }
};
  1. 将派生类定义为抽象类:如果派生类不打算提供纯虚函数的实现,可以将派生类定义为抽象类。抽象类是包括纯虚函数的类,没法实例化。例如:
class Base {
public:
    virtual void foo() = 0; // 纯虚函数
};

class Derived : public Base {
public:
    // 没有为纯虚函数提供具体实现
};

int main() {
    Derived d; // 编译毛病,Derived是抽象类
    return 0;
}
  1. 检查是否是忘记重写纯虚函数:派生类中一定要使用override关键字来重写基类中的纯虚函数。如果没有使用override关键字,会致使编译器没法正确辨认是否是重写了纯虚函数。例如:
class Base {
public:
    virtual void foo() = 0; // 纯虚函数
};

class Derived : public Base {
public:
    void foo() { // 毛病:忘记使用override关键字
        // 实现具体逻辑
    }
};

int main() {
    Derived d; // 编译毛病,Derived没有正确重写foo函数
    return 0;
}

需要注意的是,纯虚函数可以有默许实现。如果派生类没有提供自己的实现,将使用基类中的默许实现。例如:

class Base {
public:
    virtual void foo() = 0; // 纯虚函数
};

void Base::foo() {
    // 默许实现
}

class Derived : public Base {
public:
    // 没有提供自己的实现
};

int main() {
    Derived d; // 编译通过,使用基类中的默许实现
    return 0;
}

希望以上解决方法能够帮助你解决C++中的pure virtual function call毛病。