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 „gefunden mit google suche: warning C4541: dynamic_cast fuer polymorphen Typ...“
Optionen

ich hab gestern noch den ganzen abend herumgeübt. leider ohne erfolg.
heute versuchte ich es mit linux zu kompillieren.
es hat funktioniert :-).

noch mal danke für deine antworten!

bei Antwort benachrichtigen