Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Ungewöhnliche Fehler Meldung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.02.2006, 17:27 Uhr
ref



Ich habe ein code der soll einwandfrei laufen & er zeigt auch vor dem ausführung 0 fehler 0 warnung , und soll das folgende resultat zeigen:

(1)Hund (2)Katze: 1
Mammal-Konstruktor...
Dog-Konstruktor...
(1)Hund (2)Katze: 2
Mammal-Konstruktor...
Cat-Konstruktor...
(1)Hund (2)Katze: 1
Mammal-Konstruktor...
Dog-Konstruktor...

Wuff!
Oh nein, keine Katze!
Mammal-Destruktor...

Miau
rrrrrrrrrrr
Mammal-Destruktor...

Wuff!
Oh nein, keine Katze!
Mammal-Destruktor...




aber bei mir läuft nur bis zu :
(1)Hund (2)Katze: 1
Mammal-Konstruktor...
Dog-Konstruktor...
(1)Hund (2)Katze: 2
Mammal-Konstruktor...
Cat-Konstruktor...
(1)Hund (2)Katze: 1
Mammal-Konstruktor...
Dog-Konstruktor...

Wuff!

hier erscheint eine meldung mit dem inhalt:
Debug Error
Program...\dynamiccast.exe
abnormal program termination
press retry to debug the application
abbrechen wiederholung ignorieren

und manchmal (nicht immer) vor der ausführung wird 0 fehler 1 warnung gezeigt statt 0 fehler 0 warnung
diese warnung ist:
warning C4541: 'dynamic_cast' fuer polymorphen Typ 'class Mammal' mit /GR- verwendet; unvorhersehbares Verhalten moeglich


das resultat wird auch in diesem fall bis zu (Wuff!) erscheinen

hat jemand eine ahnung was genau zu diesem fehler geführt hat, und wie man ihn beseitigen?

Hier ist der CODE:





C++:
// Listing 18.2 - Dynamische Typumwandlung

#include <iostream>

using std::cout; // Diese Datei verwendet std::cout



class Mammal

{

public:

     Mammal():itsAge(1) { cout << "Mammal-Konstruktor...\n"; }

     virtual ~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: ";

         std::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 =  dynamic_cast<Cat *> (Zoo[i]);



         if (pRealCat)

             pRealCat->Purr();

         else

             cout << "Oh nein, keine Katze!\n";



         delete Zoo[i];

         cout << "\n";

     }



     return 0;

}




--
Man kann ein Problem nicht mit der gleichen Denkweise lösen, mit der es erschaffen wurde. (Albert Einstein)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.02.2006, 20:05 Uhr
ao

(Operator)


Du hast in deinem Zoo Hunde und Katzen durcheinander und versuchst mit allen einen Downcast auf Katze. Das klappt natürlich nur bei denen, die wirklich Katzen sind, also nicht bei den Hunden. Bei denen musst du dich, wie die Warnung schon sagt, auf unerwartetes Verhalten einstellen.

Siehe auch hier: http://msdn2.microsoft.com/en-us/library/we6hfdy0.aspx

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.02.2006, 21:28 Uhr
ref



keine annung was GR- in die warnung zu bedeutung hat, ob ich in die kompiller-optionen
einstellungen machen muss, diese risiko möchte ich nicht nehmen, es scheint zu komplizirt zu sein , ich weiss nur dass die ausgabe soll bis zum ende erscheinen, das ist bei mir aber nicht der fall ,es wird nur die hälfte der ausgabe eingeblendet und dann wird unterbrochen und ein Debug error erscheint.
--
Man kann ein Problem nicht mit der gleichen Denkweise lösen, mit der es erschaffen wurde. (Albert Einstein)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.02.2006, 22:14 Uhr
Spacelord
Hoffnungsloser Fall


Wenn dir das direkte hinzufügen von GR zu kompliziert ist kannst du das auch über die grafische Oberfläche einstellen.
Projekt->Einstellungen->Reiter C++->in der Combo Box "Programmiersprache C++" auswählen und dann bei "RTTI aktivieren" nen Häckchen hin machen.

Edit: Da wirst du nicht drum rum kommen.Ohne RTTI kein dynamic_cast...

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 22.02.2006 um 22:16 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.02.2006, 22:27 Uhr
ref



schon gemacht .. alles läuft wunderbar , danke spacelord .
--
Man kann ein Problem nicht mit der gleichen Denkweise lösen, mit der es erschaffen wurde. (Albert Einstein)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: