Programmieren - alles kontrollieren 4.937 Themen, 20.645 Beiträge

c++: problem mit dynamic_cast.... funktioniert dieses programm b

Yves3 / 8 Antworten / Flachansicht Nickles

halo


ich hab eine code aus meinem buch. beim kompillieren mit visual studio 6.0 gibt es eine warnung.


warning C4541: 'dynamic_cast' fuer polymorphen Typ 'class Mammal' mit /GR- verwendet; unvorhersehbares Verhalten moeglich


bei meinem kollegen gibt es die selbe warnung. (leider auch visual studio 6.0) das programm stürzt dann nach der dritten eingabe ab. :-(


könntet ihr mal schauen, ob das programm bei euch auch abstürzt?(wenn möglich mit einem anderen kompiller) oder noch besser: wisst ihr, woran das liegt?


danke!


// 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;
}

bei Antwort benachrichtigen
die speak methoden der a d-oli
Yves3 d-oli „ die speak methoden der abgeleiteten klassen sind jetzt auch virtual . heisst...“
Optionen

ich hab jetzt meinen code entsprechend angepasst. bisher stürzte das programm direkt nach der dritten eingabe ab. jetz läuft es bis zum ersten "Wuf!". die warnung zeigt auf diese zeile...
"pRealCat = dynamic_cast ( Zoo[ i ] );"
...und dort passiert jetz anscheinend auch der fehler.

die warnung:
"warning C4541: 'dynamic_cast' fuer polymorphen Typ 'class Mammal' mit /GR- verwendet; unvorhersehbares Verhalten moeglich"

weisst du, was mit "/GR-" gemint ist?

danke für deine ausführlichen antworten!

bei Antwort benachrichtigen