2

以下のコードを VS2010 SP1 でコンパイルおよびリンクすると、シンボル Base::Base(void) が見つからないというリンカ エラーが発生します。

暗黙のデフォルト コンストラクタが生成されないようです。

次のように b を初期化することを選択した場合const Base& b = *d;、問題なく動作します。私がdaを作れば、Derived*それはうまくいきます。最後に、dosomething純粋な仮想ではなく仮想にすると、それも機能します。

それはバグですか、それとも何か間違っていますか? ここでコードをオンラインでコンパイルしてみましたhttp://www.compileonline.com/compile_cpp11_online.php正常に動作します。

struct Base
{
    virtual void dosomething() const  = 0;
};

struct Derived : Base
{
    virtual void dosomething() const override { }
};

int main()
{
    Base* d = new Derived();
    const auto& b = *d;

    return 0;
}
4

1 に答える 1