Capisco perché questo sta accadendo, ma sono bloccato cercando di risolverlo ... ecco cosa sta facendo il mio codice quando viene generato l'errore (quindi, portando ad un crash) quando il mio programma esce ...Come risolvere "metodo virtuale puro chiamato"
pure virtual method called
SomeClass::~SomeClass()
{
BaseClassObject->SomePureVirtualMethod(this);
}
void DerivedClass::SomePureVirtualMethod(SomeClass* obj)
{
//Do stuff to remove obj from a collection
}
ho mai avere un invito new SomeClass
ma ho un QList<SomeClass*>
che aggiungo SomeClass*
oggetti a Lo scopo di questo distruttore in SomeClass
è comunicare a DerivedClass
di rimuovere un'istanza specifica di SomeClass
dalla sua raccolta di QList<SomeClass*>
.
Così, in un esempio concreto ...
BaseClass
= Shape
DerivedClass
= Triangle
SomeClass
= ShapeProperties
che possiede un riferimento alla Shape
Quindi, non ho mai un chiama a new ShapeProperties
ma ho uno QList<ShapeProperties*>
all'interno di Triangle
. Il distruttore in ShapeProperties
deve indicare a Triangle
di rimuovere una proprietà specifica di ShapeProperties
dalla sua raccolta di QList<ShapeProperties*>
.
Quindi come faccio a sapere quale istanza di "questo" mi riferisco a se la chiamo con il costruttore derivato? – user869525
@ user869525: Potresti provare a riformulare quello? Non ho capito ... –
Probabilmente ho frainteso questo, "Se' SomePureVirtualMethod' deve essere chiamato al distruttore, allora dovrai chiamarlo all'interno del distruttore della classe dove è la definizione effettiva del metodo che desideri. " – user869525