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)。

barで空にするだけBaseです:

virtual void bar() {}

またはpure virtual(インスタンス化するには、派生クラスで再実装する必要があります)

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

2つの問題があります。まず、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 に答える