рассмотрит следующий код:Чистых виртуальный деструктор локального абстрактного класса
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();
}
код не компилируется! Есть идеи? - это любой способ переопределить чистый виртуальный деструктор базового класса, который объявлен локально?
Все определения метода локального класса должны быть встроены внутри класса. – Jarod42
Поскольку вы находитесь в локальной области (поэтому вы управляете зависимостями), вы можете избавиться от '= 0' и предоставить код напрямую. – Jarod42