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
d-oli Yves3 „ich hab jetzt meinen code entsprechend angepasst. bisher stürzte das programm...“
Optionen

gefunden mit google suche: "warning C4541: 'dynamic_cast' fuer polymorphen Typ"

unter: http://mail.ooc.nf.ca/pipermail/ob-users/2001-September/019605.html

>Now I get about 250 compiler warnings (e.g. this one:
>c:\programme\ooc\include\ob\except.h(300) : warning C4541:
>'dynamic_cast' fuer polymorphen Typ 'class CORBA::Exception' mit /GR-
>verwendet; unvorhersehbares Verhalten moeglich)

You *have to* compile with Exception handling activated and RTTI information /GR.

Also ist es vermutlich blos eine Kompiler-Option die du bei den Projekteinstellungen vornehmen must. Ich kenne die Menüführung von VC6 nicht auswendig aber unter optionen und/oder projekteinstellungen ( oder so ähnlich) gibt es irgendwo ein Fenster mit nem Haufen Tabs. Dort kannst du solche einstellungen vornehmen.

Gruss d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen