0

我得到了错误undefined reference to 'vtable for Base'。我不知道这意味着什么,因为我没有使用任何称为“vtable”的东西。另外,我不完全了解如何制作指针并new Derived影响程序。任何人都可以清除这个吗?谢谢。

#include <iostream>

using std::cout;

class Base { // undefined reference to 'vtable for Base'

    public:
        void f();
        virtual void bar();

};
class Derived : public Base {
    public:
        void f();
        void bar() {
            cout << "I am bar";
        }
};

int main() {

    Derived d;
    Base * b = &d;

    b->bar();

}
4

2 回答 2

4

您必须实现virtual您实例化的类的功能才能编译。(或标记它们pure virtual)。

只需barBase

virtual void bar() {}

或者pure virtual(必须在派生类中重新实现才能实例化它们)

virtual void bar() = 0;
于 2012-08-16T13:09:25.087 回答
1

你有两个问题。首先,在Base纯虚拟中制作方法:

class Base {
    public:
        virtual void f()=0;
        virtual void bar()=0;
};

其次,您需要实施f()

class Derived : public Base {
    public:
        void f(){}
        void bar() {}
};
于 2012-08-16T13:16:53.730 回答