|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
proggaholic Junior JLI'ler
Alter: 36 Anmeldedatum: 07.05.2005 Beiträge: 85 Wohnort: Heap Medaillen: Keine
|
Verfasst am: 19.08.2005, 07:57 Titel: dynamic_cast - Laufzeitfehler |
|
|
Joah, jetzt hab ich auch mal ein kleines Problemchen...
Ich bin grade in meinem Übungsbuch (MuT "JLI C++" Ausgabe 2002 von Jesse Liberty) bei Polymorphie und dort wird zur Typumwandlung die Methode dynamic_cast vorgestellt. Das Beispiellisting verursacht bei mir allerdings einen runtime-error. Hier erstmal das Listing:
CPP: | // Listing 18.2 - Dynamische Typumwandlung
#include <iostream.h>
class Mammal
{
public:
Mammal():itsAge(1) { cout << "Mammal-Konstruktor...\n"; }
~Mammal() { cout << "Mammal-Destruktor...\n"; }
virtual void Speak() const { cout << "Mammal gib Laut!\n"; }
protected:
int itsAge;
};
class Cat: public Mammal
{
public:
Cat() { cout << "Cat-Konstruktor...\n"; }
~Cat() { cout << "Cat-Destruktor...\n"; }
void Speak()const { cout << "Miau\n"; }
void Purr() const { cout << "rrrrrrrrrrr\n"; }
};
class Dog: public Mammal
{
public:
Dog() { cout << "Dog-Konstruktor...\n"; }
~Dog() { cout << "Dog-Destruktor...\n"; }
void Speak()const { cout << "Wuff!\n"; }
};
int main()
{
const int NumberMammals = 3;
Mammal* Zoo[NumberMammals];
Mammal* pMammal;
int choice,i;
for (i=0; i<NumberMammals; i++)
{
cout << "(1)Hund (2)Katze: ";
cin >> choice;
if (choice == 1)
pMammal = new Dog;
else
pMammal = new Cat;
Zoo[i] = pMammal;
}
cout << "\n";
for (i=0; i<NumberMammals; i++)
{
Zoo[i] ->Speak();
Cat *pRealCat = 0;
pRealCat = dynamic_cast< Cat *> (Zoo[i]);
if (pRealCat)
pRealCat->Purr();
else
cout << "Oh nein, keine Katze!\n";
delete Zoo[i];
cout << "\n";
}
return 0;
}
| Der Autor hat in der Ausgabe 1,2 und wieder 1 bei den Abfragen eingegeben (wobei ich festgestellt habe, dass es keinen Unterschied macht). Sobald dynamic_cast angewendet wird, kommt es dann zu diesem Laufzeitfehler:
Zitat: | Unbehandelte Ausnahme bei 0x77e53887 in p334-1)dynamischetypumwandlung.exe: Microsoft C++ exception: __non_rtti_object @ 0x0012fd08 |
Ich bin über jede Hilfe dankbar... |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 19.08.2005, 10:42 Titel: |
|
|
Also bei mir ging der Code ohne Probleme. Was für einen Compiler verwendest den du? _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
proggaholic Junior JLI'ler
Alter: 36 Anmeldedatum: 07.05.2005 Beiträge: 85 Wohnort: Heap Medaillen: Keine
|
Verfasst am: 19.08.2005, 11:19 Titel: |
|
|
Bin einer der softgames Visual Studio Academic License-Gewinner ;) -> VS 7.1
[edit]
Ja also, wie man sehen kann, is der Code oben schon ziemlich alt (ist übrigens von der Buch-CD), aber dank RTTI ist er am Ende doch noch zum Laufen gekommen (thx an einen gewissen Mr. "gothreaper")
mfg
proggaholic |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|