Klasse Haustier - Fehlermeldungen verstehe ich nicht Unterlagen nocheinmal reinziehen



  • Hallo und guten Abend liebe Gemeinde.

    Ich wollte mir ein Programm schreiben, über das ich Haustiere aussuchen kann. Zur Auswahl stehen eine Katze, ein Vogel, ein Hund und ein Hamster.

    Folgenden Code habe ich geschrieben:

    #pragma once
    #include "Haustier.h"
    using namespace std;
    
    class Hamster:Haustier
    {
    private:
    	double Maximale_Laufradgeschwindigkeit;
    public:
    	Hamster(void);
    	~Hamster(void);
    
    	double getMaximale_Laufradgeschwindigkeit();
    	void setMaximale_Laufradgeschwindigkeit(double);
    };
    
    #pragma once
    #include "Haustier.h"
    
    class Hund:Haustier
    {
    private:
    	string Gassi_gehen;
    public:
    	Hund(void);
    	~Hund(void);
    
    	string get_Gassi_gehen();
    	void set_Gassig_gehen(string);
    };
    
    #pragma once
    #include "Haustier.h"
    
    class Katze:Haustier
    {
    private:
    	double Anzahl_Mäuse_fangen;
    public:
    	Katze(void);
    	~Katze(void);
    
    	double getAnzahl_Mäuse_fangen();
    	void setAnzahl_Mäuse_fangen(double);
    };
    
    #pragma once
    #include <string>
    using namespace std;
    
    class Vogel
    {
    private:
    	string Zwitschern;
    public:
    	Vogel(void);
    	~Vogel(void);
    
    	string getZwitschern();
    	void setZwitschern(string);
    };
    
    #pragma once
    #include <string>
    using namespace std;
    
    class Haustier
    {
    private:
    	string Name;
    	string Besitzer;
    	string charaktistisches_Geräusch;
    	double Gewicht;
    	double Größe;
    
    public:
    	Haustier(void);
    	~Haustier(void);
    
    	string getName();
    	string getBesitzer();
    	string charakteristisches_Geräusch;
    	double getGewicht();
    	double getGröße();
    
    	void setName(string);
    	void setBesitzer(string);
    	void setcharakteristisches_Geräusch(string);
    	void setGewicht(double);
    	void setGröße(double);
    };
    
    #include "Hamster.h"
    #include <iostream>
    using namespace std;
    
    Hamster::Hamster(void)
    {
    }
    
    Hamster::~Hamster(void)
    {
    }
    
    double Hamster::getMaximale_Laufradgeschwindigkeit()
    {
    	return Maximale_Laufradgeschwindigkeit;
    }
    
    void Hamster::setMaximale_Laufradgeschwindigkeit(double maximum_speed)
    {
    	Maximale_Laufradgeschwindigkeit = maximum_speed;
    }
    
    #include "Hund.h"
    #include <iostream>
    using namespace std;
    
    Hund::Hund(void)
    {
    }
    
    Hund::~Hund(void)
    {
    }
    
    string Hund::get_Gassi_gehen()
    {
    	return Gassi_gehen;
    }
    
    void Hund::set_Gassig_gehen(string gassi_gehen)
    {
    	Gassi_gehen = gassi_gehen;
    }
    
    #include "Katze.h"
    #include <string>
    using namespace std;
    
    Katze::Katze(void)
    {
    }
    
    Katze::~Katze(void)
    {
    }
    
    double Katze::getAnzahl_Mäuse_fangen()
    {
    	return Anzahl_Mäuse_fangen;
    }
    
    void Katze::setAnzahl_Mäuse_fangen(double catch_mouses)
    {
    	Anzahl_Mäuse_fangen = catch_mouses;
    }
    
    #include "Vogel.h"
    #include <iostream>
    using namespace std;
    
    Vogel::Vogel(void)
    {
    }
    
    Vogel::~Vogel(void)
    {
    }
    
    string Vogel::getZwitschern()
    {
    	return Zwitschern;
    }
    
    void Vogel::setZwitschern(string twitter)
    {
    	Zwitschern = twitter;
    }
    
    #include "Hamster.h"
    #include "Haustier.h"
    #include "Hund.h"
    #include "Katze.h"
    #include "Vogel.h"
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	cout << "\tAuswahl eines Haustiers!/n";
    
    	return 0;
    }
    

    Bloß bekomme ich folgende Fehlermeldungen:

    Hamster.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall Haustier::Haustier(void)" (??0Haustier@@QAE@XZ)" in Funktion ""public: __thiscall Hamster::Hamster(void)" (??0Hamster@@QAE@XZ)".
    Hund.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall Haustier::Haustier(void)" (??0Haustier@@QAE@XZ)".
    Katze.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall Haustier::Haustier(void)" (??0Haustier@@QAE@XZ)".
    Hamster.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall Haustier::~Haustier(void)" (??1Haustier@@QAE@XZ)" in Funktion ""public: __thiscall Hamster::~Hamster(void)" (??1Hamster@@QAE@XZ)".
    Hund.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall Haustier::~Haustier(void)" (??1Haustier@@QAE@XZ)".
    Katze.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall Haustier::~Haustier(void)" (??1Haustier@@QAE@XZ)".
    fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
    

    Ich kann damit nichts anfangen.

    Was habe ich falsch gemacht??

    Vielen Dank für die Antworten im Voraus.

    Gruß

    Max



  • Du musst die Funktionen von Haustier ebenfalls definieren.
    Übrigens musst du public ableiten.



  • Nathan schrieb:

    Du musst die Funktionen von Haustier ebenfalls definieren.

    Also wie bei beispielsweise "Vogel.cpp"??

    Nathan schrieb:

    Übrigens musst du public ableiten.

    Wie meinst Du das??



  • Ja, wie bei Vogel.cpp.
    Steht dazu nichts in deinen Unterlagen?

    class foo : public bar
    {...};
    


  • silent_max schrieb:

    Nathan schrieb:

    Du musst die Funktionen von Haustier ebenfalls definieren.

    Also wie bei beispielsweise "Vogel.cpp"??

    Nathan schrieb:

    Übrigens musst du public ableiten.

    Wie meinst Du das??

    class Hamster : public Haustier
    

    Wolltest du nicht "der C++ Programmierer" lesen? da steht nämlich alles drin 😉



  • Ersteinmal Danke für die bisherigen Antworten.

    Nathan schrieb:

    Ja, wie bei Vogel.cpp.
    Steht dazu nichts in deinen Unterlagen?

    class foo : public bar
    {...};
    

    Anscheinend muss ich die Unterlagen noch einmal lesen ...

    Weil ich habe es so verstanden, dass ich das in der "Haustier APP.cpp" machen muss, eben von public abzuleiten...

    Ich hoffe nur, dass ich mich diesmal nicht so anstelle wie bei der Klasse Person...



  • Cyres schrieb:

    silent_max schrieb:

    Nathan schrieb:

    Du musst die Funktionen von Haustier ebenfalls definieren.

    Also wie bei beispielsweise "Vogel.cpp"??

    Nathan schrieb:

    Übrigens musst du public ableiten.

    Wie meinst Du das??

    class Hamster : public Haustier
    

    Wolltest du nicht "der C++ Programmierer" lesen? da steht nämlich alles drin 😉

    Wie geschrieben ... ich dachte, man muss

    class Hamster:public Haustier
    

    in der APP.cpp schreiben??

    Gruß Max



  • Nein, da wo du auch Hamster : Haustier schreibst.
    Anstatt : musst du : public schreiben.



  • Also ich habe mir mal den C++ Programmierer reingezogen, bloß habe ich auf meine Frage keine Antwort gefunden.

    Die Fehler, die ich gestern gemacht habe, habe ich alle sammt bereinigen können. Bloß weiß jetzt nicht mehr weiter.

    Folgenden Programmcode habe ich in "Haustier App.cpp" aufgesetzt:

    #include "Hamster.h"
    #include "Haustier.h"
    #include "Hund.h"
    #include "Katze.h"
    #include "Vogel.h"
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	int number;
    
    	cout << "\tAuswahl eines Haustiers!\n";
    	cout << "\n";
    
    	do
    	{
    		cout << "Welches Haustier wollen Sie denn?\n";
    		cout << "(1) Hamster\n";
    		cout << "(2) Hund\n";
    		cout << "(3) Katze\n";
    		cout << "(4) Vogel\n";
    		cout << "(0) Exit\n";
    		cin  >> number;
    		cout << "\n";
    
    		switch(number)
    			case 1:
    
    				cout << "Sie haben sich fuer einen Hund entschieden!\n";
    				cout << "\n";
    				cout << "Wie soll er denn heissen?\n";
    
    	}while(number!=0);
    
    	return 0;
    }
    

    Muss ich jetzt in Zeile 30 jetzt schreiben

    Hund Dog;
    

    oder muss ich schreiben

    Haustier Hund;
    

    ???

    Außerdem.... es gibt ja den Befehl

    getline(cin, ...)
    

    Gibt es für Setter einen ähnlichen Befehl??

    Beispiel:

    Ich will den Namen eines Hundes per Tastatureingabe auf die Konsole schreiben.

    cin Hund.setName;
    

    Hätte vielleicht einer von euch Tipps und Tricks?

    Für die Antworten bedanke ich mich im Voraus.

    Gruß

    Max



  • silent_max schrieb:

    Muss ich jetzt in Zeile 30 jetzt schreiben

    Hund Dog;
    

    oder muss ich schreiben

    Haustier Hund;
    

    ???

    Willst du ein Haustier oder einen Hund?
    Einen Hund, oder?

    Außerdem.... es gibt ja den Befehl

    getline(cin, ...)
    

    Gibt es für Setter einen ähnlichen Befehl??

    Beispiel:

    Ich will den Namen eines Hundes per Tastatureingabe auf die Konsole schreiben.

    cin Hund.setName;
    

    Ja, das geht, was du vorhast.
    Dafür brauchst du aber entweder Referenzen oder Operatorenüberladung.
    Deswegen kannst du es momentan noch nicht machen.
    Du musst schreiben:

    string name;
    cin >> name;
    hund.setName(name);
    


  • Nathan schrieb:

    Willst du ein Haustier oder einen Hund?
    Einen Hund, oder?

    Ja ich will einen Hund.
    So wie ich Dich verstehe muss ich

    Hund Dog;
    

    schreiben??

    Nathan schrieb:

    Du musst schreiben:

    string name;
    cin >> name;
    hund.setName(name);
    

    Ok, danke für den Tipp.



  • Ja.



  • Wenn ich jetzt folgenden Code schreibe:

    Hund Dog;
    				cout << "Sie haben sich fuer einen Hund entschieden!\n";
    				cout << "\n";
    				cout << "Wie soll er denn heissen?\n";
    				string name;
    				cin  >> name;
    				Dog.setName(name);
    

    Dann wird mir in Zeile 7 Dog. rot unterringelt mit der Meldung

    Error: Der Bezeichner ""Dog"" ist nicht definiert.
    


  • Sonst nichts geändert?



  • Nathan schrieb:

    Sonst nichts geändert?

    Ich habe doppelt und dreifach darüber geschaut .... ich habe wirklich nichts geändert...

    Hier ist nochmal der gesamte Code:

    #include "Hamster.h"
    #include "Haustier.h"
    #include "Hund.h"
    #include "Katze.h"
    #include "Vogel.h"
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	int number;
    
    	cout << "\tAuswahl eines Haustiers!\n";
    	cout << "\n";
    
    	do
    	{
    		cout << "Welches Haustier wollen Sie denn?\n";
    		cout << "(1) Hamster\n";
    		cout << "(2) Hund\n";
    		cout << "(3) Katze\n";
    		cout << "(4) Vogel\n";
    		cout << "(0) Exit\n";
    		cin  >> number;
    		cout << "\n";
    
    		switch(number)
    			case 1:
    				Hund Dog;
    				cout << "Sie haben sich fuer einen Hund entschieden!\n";
    				cout << "\n";
    				cout << "Wie soll er denn heissen?\n";
    				string name;
    				cin  >> name;
    				Dog.setName(name);
    
    	}while(number!=0);
    
    	return 0;
    }
    


  • Ach so.
    Du kannst keine Variablen innerhalb von case definieren.
    Du musst dafür einen neuen Block (Scope) einführen.

    switch(number)
    {
        case 1:
        { // Beginn neuer Block
            Hund Dog;
            cout << "Sie haben sich fuer einen Hund entschieden!\n";
            cout << "\n";
            cout << "Wie soll er denn heissen?\n";
            string name;
            cin  >> name;
            Dog.setName(name);
            break; // WICHTIG!
        } // Ende neuer Block
    }
    


  • FUCK

    Gib mir einen Revolver und ich erschiess mich

    Edit:

    Was ist an der letzten Zeile falsch:

    case 1:
    			{
    				Hund Dog;
    				cout << "Sie haben sich fuer einen Hund entschieden!\n";
    				cout << "\n";
    				cout << "Wie soll er denn heissen?\n";
    				string name;
    				cin  >> name;
    				Dog.setName(name);
    				cout << "\n";
    				cout << "Wer soll denn der Besitzer sein?\n";
    				string Besitzer;
    				cin.ignore(1);
    				getline(cin, Besitzer);
    				Dog.setBesitzer(Besitzer);
    				cout << "Welches charakteristisches Geraeusch soll er denn machen?\n";
    				string chrakterliches_Geräusch;
    				getline(cin, charakterliches_Geräusch);
    
    			}
    


  • Kannst du Buchstaben vergleichen?

    PS: Umlaute solltest du tunlichst vermeiden.



  • Zagatho_zero87 schrieb:

    Kannst du Buchstaben vergleichen?

    Wie meinst Du das??



  • string chrakterliches_Geräusch;   // Rechtschreibfehler: da fehlt ein "a"
    getline(cin, charakterliches_Geräusch);
    

Log in to reply