Dynamische Typumwandlung



  • Hi ich lerne gerade c++ und ich habe da nen kleines problem

    #include <iostream>
    using namespace std;
    
    class Animal
    {
    	public:
    		Animal (){}
    			virtual ~Animal(){}
    		virtual void speak () const = 0;
    };
    
    class Cat : public Animal
    {
    	public:
    		Cat () { }
    		~Cat () { }
    		void speak () const { cout<<"Katze spricht";}
    		void purr () const { cout <<"rrrrrrrrr";}
    };
    
    class Dog : public Animal
    {
    	public:
    		Dog () { }
    		~Dog () { }
    		void speak () const { cout<<"Hund spricht";}
    };
    
    int main()
    {
    	Animal* ptr = 0 ;
    	cout << "(1) Katze , (2) Hund"<<endl;
    	cout << "Auswahl: ";int choice; cin >> choice;
    
    	if(choice == 1)
    		ptr = new Cat;
    	else
    		ptr = new Dog;
    
    	ptr->speak();
    
    	cout << "\n";
    
    	Cat* c_ptr = 0;
    
    	c_ptr = dynamic_cast<Cat*>(ptr);
    
    	if(c_ptr)
    	c_ptr->purr();
    
    	return 0;
    }
    


  • Hi!

    Ja und? Wo ist das Problem? Nur zu sagen das du ein Problem hast und dann einen Code zu schicken bringt nicht viel. Weiß ja jetzt keiner wo das Problem liegt.

    Weiterhelfen würde außer das du ein Problem hast noch die Antwort auf folgende Fragen:
    Gibt es eine Fehlermeldung, wenn ja welche? Welchen Compiler verwendest du?

    Code-Hacker



  • oh entschuldige,
    es kommt eine warnung und dann beim starten des programms kommt der debuger

    Compiler:
    ms vc++6



  • Hi!

    Was für eine Warnung, wie lautet die? Und was meinst du mit "und dann beim starten des programms kommt der debuger"? Wird das Programm unterbrochen? Wenn ja wo?

    Lass dir doch nicht alles aus der Nase ziehen. Gib alle Infos die du geben kannst. Lieber zuviel als zu wenig.

    Code-Hacker



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

    bricht auch in der zeile vom dynamic_cast ab



  • du musst dem vc sagen das er auch rtti (run time type information) verwenden soll...
    sonst kackt der bei dem dynamic<cast> ab...

    ich hab das auch noch nie probiert aber laut msdn musst du nur /GR einfügen...

    The Enable Run-Time Type Information option (/GR) causes the compiler to add code to check object types at run time. When this option is specified, the compiler defines the _CPPRTTI preprocessor macro. The option is cleared (/GR–) by default.

    vermutlich unter projekt->settings dann auf den reiter c/c++ und unter projekt options /GR einfügen

    sollte dann hoffentlich funzen...


Log in to reply