C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Fehlermeldung bei dynamic_cast aufruf

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Florian Wolferseder
Guest





PostPosted: Mon Jan 29, 2007 7:39 pm    Post subject: Fehlermeldung bei dynamic_cast aufruf Reply with 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);
....
}

Gruß Florian
Back to top
Rolf Magnus
Guest





PostPosted: Mon Jan 29, 2007 11:50 pm    Post subject: Re: Fehlermeldung bei dynamic_cast aufruf Reply with quote



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





PostPosted: Tue Jan 30, 2007 2:11 am    Post subject: Re: Fehlermeldung bei dynamic_cast aufruf Reply with quote



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





PostPosted: Tue Jan 30, 2007 3:32 am    Post subject: Re: Fehlermeldung bei dynamic_cast aufruf Reply with quote

"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





PostPosted: Wed Jan 31, 2007 4:07 am    Post subject: Re: Fehlermeldung bei dynamic_cast aufruf Reply with quote

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





PostPosted: Wed Feb 07, 2007 4:39 am    Post subject: Re: Fehlermeldung bei dynamic_cast aufruf Reply with quote

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





PostPosted: Wed Feb 07, 2007 11:23 pm    Post subject: Re: Fehlermeldung bei dynamic_cast aufruf Reply with quote

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





PostPosted: Thu Feb 08, 2007 7:31 pm    Post subject: Re: Fehlermeldung bei dynamic_cast aufruf Reply with quote

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





PostPosted: Tue Feb 27, 2007 5:26 am    Post subject: Re: Fehlermeldung bei dynamic_cast aufruf Reply with quote

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





PostPosted: Tue Feb 27, 2007 5:26 am    Post subject: Re: Fehlermeldung bei dynamic_cast aufruf Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.