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) |