未生成VS2010的隐式默认构造函数

Implicit default constructor not generated VS2010

本文关键字:默认 构造函数 VS2010 未生      更新时间:2023-10-16

我在VS2010 SP1编译和链接下面的代码时遇到链接器错误,说它找不到符号Base::Base(void)。

似乎没有生成隐式默认构造函数。

如果我选择按照const Base& b = *d;初始化b,它就可以正常工作。如果我把d做成Derived*,它就行了。最后,如果我使dosomething不是纯虚拟的而是虚拟的,它也可以工作。

是bug还是我做错了什么?我试着在这里在线编译代码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;
}

代码很好WRT Base,没有任何东西可以阻止生成ctor。看起来像是VS2010 中的一个错误