4
class a //my base class
 {
public:
    a()
    {
        foo();
    }
  virtual void foo() = 0;
};



class b : public a
{
    public:
    void foo()
    {
    }
};

int main()
{
    b obj; //ERROR:  undefined reference to a::foo()
}

エラーが発生するのはなぜですか?純粋仮想 foo が定義されています。コードを機能させるには、コードの何を変更する必要がありますか? 基本クラスの純粋仮想メソッドをそのコンストラクターで呼び出す必要があります。

4

3 に答える 3

2

Yashwant Kanetkar 著「Let Us C++」より引用

呼び出されるのは常に現在のクラスのメンバ関数です。つまり、仮想メカニズムはコンストラクタ内では機能しません。

そのため、foo()ofclass aが呼び出されます。宣言されているためpure virtual、エラーが報告されます

于 2013-02-12T11:41:19.050 に答える