JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=b377e4c9fed77a4753b923dd09fc6adeMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

dynamic_cast - Laufzeitfehler

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
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

BeitragVerfasst am: 19.08.2005, 07:57    Titel: dynamic_cast - Laufzeitfehler Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden MSN Messenger
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 19.08.2005, 10:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proggaholic
Junior JLI'ler


Alter: 36
Anmeldedatum: 07.05.2005
Beiträge: 85
Wohnort: Heap
Medaillen: Keine

BeitragVerfasst am: 19.08.2005, 11:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum