考虑以下代码:
struct A {
virtual void foo() {}
virtual ~A() = 0;
};
struct B :public A
{
virtual void foo() {};
};
A::~A() {};
int main()
{
A * a = new B();
a->foo();
}
它的工作完美无缺。但是现在考虑第二段代码,在其中我们需要在函数内部局部声明我们的类,如下所示:
void foo()
{
struct A {
virtual void foo() {}
virtual ~A() = 0;
};
struct B :public A
{
virtual void foo() {};
};
A::~A() {}; //error C2352 : 'A::~A' : illegal call of non - static member function
A * a = new B();
a->foo();
}
int main()
{
foo();
}
代码无法编译!有什么想法吗?是否有任何方法可以重新定义在本地声明的基类的纯虚拟析构函数?