| View previous topic :: View next topic |
| Author |
Message |
Florian Wolferseder Guest
|
Posted: Mon Jan 29, 2007 7:39 pm Post subject: Fehlermeldung bei dynamic_cast aufruf |
|
|
Hallo,
ich möchte den Befehl dynamic_cast verweden und dabei taucht immer die
Fehlermeldung
"Debug Error abnormal programm termination" auf:
Programm:
class Mammal
{
};
class Cat: public Mammal
{
};
int main
{
Mammal *D= new Cat;
Cat *pCat = dynamic_cast <Cat*> (D);
....
}
Gruß Florian |
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Mon Jan 29, 2007 11:50 pm Post subject: Re: Fehlermeldung bei dynamic_cast aufruf |
|
|
Florian Wolferseder wrote:
| Quote: | Hallo,
ich möchte den Befehl dynamic_cast verweden und dabei taucht immer die
Fehlermeldung
"Debug Error abnormal programm termination" auf:
Programm:
class Mammal
{
};
class Cat: public Mammal
{
};
int main
{
Mammal *D= new Cat;
Cat *pCat = dynamic_cast <Cat*> (D);
...
}
|
Ein dynamic_cast kann nur mit polymorphen Typen eingesetzt werden, d.h.
deine Basisklasse muss mindestens eine virtuelle Memberfunktion besistzen. |
|
| Back to top |
|
 |
Heinz Saathoff Guest
|
Posted: Tue Jan 30, 2007 2:11 am Post subject: Re: Fehlermeldung bei dynamic_cast aufruf |
|
|
Moin,
Florian Wolferseder schrieb...
| Quote: | ich möchte den Befehl dynamic_cast verweden und dabei taucht immer die
Fehlermeldung
"Debug Error abnormal programm termination" auf:
Programm:
class Mammal
{
};
class Cat: public Mammal
{
};
int main
{
Mammal *D= new Cat;
Cat *pCat = dynamic_cast <Cat*> (D);
...
}
|
dynamic_cast funktioniert nur, wenn die Basisklasse mindestens eine
virtuelle Funktion enthält. Dein Programm sollte funktionieren, wenn Du
Mammal wie folgt definierst:
class Mammal {
public:
virtual ~Mammal() {}
};
- Heinz |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Tue Jan 30, 2007 3:32 am Post subject: Re: Fehlermeldung bei dynamic_cast aufruf |
|
|
"Florian Wolferseder" <news (AT) wolferseder (DOT) de> writes:
| Quote: | ich möchte den Befehl dynamic_cast verweden und dabei taucht immer
die Fehlermeldung "Debug Error abnormal programm termination" auf:
|
<spitzfindig>
dynamic_cast ist nicht ein Befehl, sondern ein Operator.
</spitzfindig>
| Quote: | Programm:
class Mammal
{
};
class Cat: public Mammal
{
};
int main
{
Mammal *D= new Cat;
Cat *pCat = dynamic_cast <Cat*> (D);
|
Damit Du diesen dynamic_cast-Ausdruck auswerten kannst, muss die
Klasse Mammal mindestens eine virtuelle Memberfunktion haben. |
|
| Back to top |
|
 |
R. Schneeweiß Guest
|
Posted: Wed Jan 31, 2007 4:07 am Post subject: Re: Fehlermeldung bei dynamic_cast aufruf |
|
|
Der dynamic_cast<> Operator greift auf die V-Table zu, um die
Durchführbarkeit des
Casts zu überprüfen. Deshalb muss eine V-Table in der Elternklasse vorhanden
sein.
Das wiederum erhält man durch das Aufnehmen mindestens einer virtuellen
Funktion.
http://www.oop-trainer.de |
|
| Back to top |
|
 |
Boris Glawe Guest
|
Posted: Wed Feb 07, 2007 4:39 am Post subject: Re: Fehlermeldung bei dynamic_cast aufruf |
|
|
| Quote: |
class Mammal
{
};
class Cat: public Mammal
{
};
int main
{
Mammal *D= new Cat;
Cat *pCat = dynamic_cast <Cat*> (D);
...
}
Ein dynamic_cast kann nur mit polymorphen Typen eingesetzt werden, d.h.
deine Basisklasse muss mindestens eine virtuelle Memberfunktion besistzen.
|
Ein normaler Cast tut's hier auch! Das Einfügen einer virtuellen
Methode, nur damit dynamic_cast funktioniert ist hier bestimmt nicht der
korrekt Weg!?
Grüße Boris |
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Wed Feb 07, 2007 11:23 pm Post subject: Re: Fehlermeldung bei dynamic_cast aufruf |
|
|
Boris Glawe wrote:
| Quote: |
class Mammal
{
};
class Cat: public Mammal
{
};
int main
{
Mammal *D= new Cat;
Cat *pCat = dynamic_cast <Cat*> (D);
...
}
Ein dynamic_cast kann nur mit polymorphen Typen eingesetzt werden, d.h.
deine Basisklasse muss mindestens eine virtuelle Memberfunktion
besistzen.
Ein normaler Cast tut's hier auch! Das Einfügen einer virtuellen
Methode, nur damit dynamic_cast funktioniert ist hier bestimmt nicht der
korrekt Weg!?
|
Kommt darauf an, was er will. Im Beispielprogramm ist ja offensichtlich, daß
D auf eine Cat zeigt. Da tut's auch der static_cast. Den dynamic_cast
brauchst du, wenn du dir da nicht sicher sein kannst (was in "richtigen"
Programmen manchmal durchaus der Fall ist) und deshalb prüfen willst, ob
der Cast überhaupt paßt. |
|
| Back to top |
|
 |
James Kanze Guest
|
Posted: Thu Feb 08, 2007 7:31 pm Post subject: Re: Fehlermeldung bei dynamic_cast aufruf |
|
|
Rolf Magnus wrote:
| Quote: | Boris Glawe wrote:
class Mammal
{
};
class Cat: public Mammal
{
};
int main
{
Mammal *D= new Cat;
Cat *pCat = dynamic_cast <Cat*> (D);
...
}
Ein dynamic_cast kann nur mit polymorphen Typen eingesetzt werden, d.h.
deine Basisklasse muss mindestens eine virtuelle Memberfunktion
besistzen.
Ein normaler Cast tut's hier auch! Das Einfügen einer virtuellen
Methode, nur damit dynamic_cast funktioniert ist hier bestimmt nicht der
korrekt Weg!?
Kommt darauf an, was er will. Im Beispielprogramm ist ja offensichtlich, daß
D auf eine Cat zeigt.
|
Was freilich nur bei den trivialsten Beispielprogrammen gilt.
(Dazu: wenn das Programm nicht mehr nur als Beispiel dienen
soll, dann hat Mammal fast sicher sowieso eine virtuelle
Funktion. Mindestens den Destruktor.)
| Quote: | Da tut's auch der static_cast. Den dynamic_cast
brauchst du, wenn du dir da nicht sicher sein kannst (was in "richtigen"
Programmen manchmal durchaus der Fall ist) und deshalb prüfen willst, ob
der Cast überhaupt paßt.
|
Die Frage ist, wie sicher ist sicher. In der Praxis sind die
Fälle, wo man static_cast beim Downcasten verwenden soll,
relatif selten.
--
James Kanze (GABI Software) email:james.kanze (AT) gmail (DOT) com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
R. Schneeweiß Guest
|
Posted: Tue Feb 27, 2007 5:26 am Post subject: Re: Fehlermeldung bei dynamic_cast aufruf |
|
|
Der dynamic_cast<> Operator greift auf die V-Table zu, um die
Durchführbarkeit des
Casts zu überprüfen. Deshalb muss eine V-Table in der Elternklasse vorhanden
sein.
Das wiederum erhält man durch das Aufnehmen mindestens einer virtuellen
Funktion.
http://www.oop-trainer.de |
|
| Back to top |
|
 |
R. Schneeweiß Guest
|
Posted: Tue Feb 27, 2007 5:26 am Post subject: Re: Fehlermeldung bei dynamic_cast aufruf |
|
|
Der dynamic_cast<> Operator greift auf die V-Table zu, um die
Durchführbarkeit des
Casts zu überprüfen. Deshalb muss eine V-Table in der Elternklasse vorhanden
sein.
Das wiederum erhält man durch das Aufnehmen mindestens einer virtuellen
Funktion.
http://www.oop-trainer.de |
|
| Back to top |
|
 |
|