Entiendo por qué ocurre esto, pero estoy atascado tratando de resolverlo ... esto es lo que mi código está haciendo cuando se genera el error (por lo tanto, provoca un bloqueo)) cuando mi programa sale ...Cómo resolver "método virtual puro llamado"
pure virtual method called
SomeClass::~SomeClass()
{
BaseClassObject->SomePureVirtualMethod(this);
}
void DerivedClass::SomePureVirtualMethod(SomeClass* obj)
{
//Do stuff to remove obj from a collection
}
nunca tener una llamada a new SomeClass
pero tengo una QList<SomeClass*>
la que añado SomeClass*
objetos a. El propósito de este destructor en SomeClass
es indicar DerivedClass
para eliminar una instancia específica de SomeClass
de su colección de QList<SomeClass*>
.
Así, en un ejemplo concreto ...
BaseClass
= Shape
DerivedClass
= Triangle
SomeClass
= ShapeProperties
que posee una referencia a Shape
Por lo tanto, nunca tengo una llame al new ShapeProperties
pero tengo un QList<ShapeProperties*>
dentro de Triangle
. El destructor en ShapeProperties
debe indicar Triangle
para eliminar una propiedad específica de ShapeProperties
de su colección de QList<ShapeProperties*>
.
Entonces, ¿cómo sé a qué instancia de 'this' me refiero si lo llamo en el constructor derivado? – user869525
@ user869525: ¿Podría intentar reformular eso? No entendí ... –
Probablemente malinterpreté esto, "Si' SomePureVirtualMethod' necesita ser llamado en el destructor, entonces tendrás que llamarlo dentro del destructor de la clase donde está la definición real del método que deseas. " – user869525