【发布时间】:2017-02-01 10:34:47
【问题描述】:
考虑以下代码:
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();
}
代码无法编译!任何的想法?有什么方法可以重新定义本地声明的基类的纯虚析构函数?
【问题讨论】:
-
本地类的所有方法定义都应该内联在类中。
-
由于您在本地范围内(因此您可以控制依赖项),您可以摆脱
= 0并直接提供代码。
标签: c++ inheritance virtual-functions