2

我在VS2010 SP1编译和链接下面的代码时收到一个链接错误,说它找不到符号Base :: Base(void)。未生成隐式默认构造函数VS2010

似乎隐式默认构造函数不会生成。

如果我选择初始化b如下const Base& b = *d;,它只是正常工作。如果我制作了一个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; 
} 

谢谢

+1

听起来像一个错误。 VS2012无复制,所以我认为它是固定的。 – Xeo

回答

0

的代码是好的WRT Base,什么能阻止生成的构造函数。看起来像VS2010中的一个bug

+0

好的谢谢,正如Xeo提到的,它似乎已经在VS2012中修复了(我只有VS2010和[VS2012在线编译器](http://rise4fun.com/Vcpp)没有链接,所以我无法测试它。还试图检查这是否列在[VS2012编译器错误修复](http://blogs.msdn.com/b/vcblog/archive/2012/08/10/10338661.aspx)下,但正如在帖子中提到的,名单远非详尽无遗。 – user2618223