弄清楚是什么让VS ++中的C++类抽象化

sus*_*att 0 c++ abstract-class visual-studio-2008 visual-studio

我正在使用VS2008构建一个普通的旧C++程序(而不是C++/CLI).我有一个抽象基类和一个非抽象派生类,并构建这个:

Base* obj;
obj = new Derived();
Run Code Online (Sandbox Code Playgroud)

失败并显示错误"'Derived':无法实例化抽象类".(但值得注意的是,如果我将鼠标悬停在Base光标上,VS会弹出一个工具提示"class base abstract",但是悬停Derived只会说"class Derived"(没有"抽象")).

这些类的定义相当大,我想避免手动检查每个方法是否已被覆盖.VS能以某种方式为我做这件事吗?有关精确定位类定义的确切部分以使其抽象的一般提示吗?

GMa*_*ckG 7

编译器应该在错误消息中告诉您.下列:

struct base
{
    virtual void foo(void) = 0;
    virtual void bar(void) = 0;
};

struct derived : base
{
    virtual void foo(void){}
};

int main(void)
{
    derived d;
}
Run Code Online (Sandbox Code Playgroud)

生产:

错误C2259:'derived':
由于以下成员无法实例化抽象类:
'void base :: bar(void)':是抽象的,
请参阅'base :: bar'的声明

动态分配也是如此.