Klasse Haustier - Fehlermeldungen verstehe ich nicht Unterlagen nocheinmal reinziehen



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


  • Das ist eigentlich ein Fehler, den der Compiler hätte finden müssen.



  • Also ich habe einmal den Code mehr "verfeinert":

    #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) Hund\n";
    		cout << "(2) Hamster\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);
    				cout << "\n";
    
    				cout << "Wer soll denn der Besitzer sein?\n";
    				string Besitzer;
    				cin.ignore(1);
    				getline(cin, Besitzer);
    				Dog.setBesitzer(Besitzer);
    				cout << "\n";
    
    				cout << "Welches charakteristisches Geraeusch soll er denn machen?\n";
    				string charakteristisches_Geräusch;
    				getline(cin, charakteristisches_Geräusch);
    				string noise;
    				Dog.setcharakteristisches_Geräusch(noise);
    				cout << "\n";
    
    				cout << "Wie gross soll denn der Hund werden?\n";
    				double Größe;
    				cin  >> Größe;
    				Dog.setGröße(Größe);
    				cout << "\n";
    
    				cout << "Wie schwer soll er denn werden?\n";
    				double Gewicht;
    				cin  >> Gewicht;
    				Dog.setGewicht(Gewicht);
    				cout << "\n";
    
    				cout << "Was wollen Sie denn mit dem Hund machen?\n";
    				string Gassi_gehen;
    				cin  >> Gassi_gehen;
    				Dog.set_Gassig_gehen (Gassi_gehen);
    				if (Gassi_gehen == Gassi_gehen)
    					cout << "Sie wollen also mit Ihrem Hund Gassi gehen\n";
    				else
    				{
    					cout << "Wozu schaffen Sie sich einen Hund an,";
    				    cout << "wenn Sie mit ihm nicht Gassi gehen wollen!\n";
    				}
    			}
    		case 2:
    			{
    				Hamster hamster;
    				cin.ignore(1);
    				cout << "Sie haben sich fuer einen Hamster entschieden!\n";
    				cout << "\n";
    
    				cout << "Wie soll er denn heissen?\n";
    				string name;
    				cin  >> name;
    				hamster.setName(name);
    				cout << "\n";
    
    				cout << "Wer soll denn der Besitzer sein?\n";
    				string Besitzer;
    				cin.ignore(1);
    				getline(cin, Besitzer);
    				hamster.setBesitzer(Besitzer);
    				cout << "\n";
    
    				cout << "Welches charakteristisches Geraeusch soll er denn machen?\n";
    				string charakteristisches_Geräusch;
    				getline(cin, charakteristisches_Geräusch);
    				string noise;
    				hamster.setcharakteristisches_Geräusch(noise);
    				cout << "\n";
    
    				cout << "Wie gross soll denn der Hammster werden?\n";
    				double Größe;
    				cin  >> Größe;
    				hamster.setGröße(Größe);
    				cout << "\n";
    
    				cout << "Wie schwer soll er denn werden?\n";
    				double Gewicht;
    				cin  >> Gewicht;
    				hamster.setGewicht(Gewicht);
    				cout << "\n";
    
    				cout << "Wieviel km/h soll denn Ihr Hamster im Laufrad machen?\n";
    				double Maximale_Laufradgeschwindigkeit;
    				cin  >> Maximale_Laufradgeschwindigkeit;
    				hamster.setMaximale_Laufradgeschwindigkeit(Maximale_Laufradgeschwindigkeit);
    				if(Maximale_Laufradgeschwindigkeit < 5)
    					cout << "Ok\n";
    				else
    					cout << "Das ist fuer einen Hamster viel zu viel.\n";
    			}
    		case 3:
    			{
    				cin.ignore(2);
    				Katze cat;
    
    				cout << "Sie haben sich fuer eine Katze entschieden!\n";
    				cout << "\n";
    
    				cout << "Wie soll sie denn heissen?\n";
    				string name;
    				cin  >> name;
    				cat.setName(name);
    				cout << "\n";
    
    				cout << "Wer soll denn der Besitzer sein?\n";
    				string Besitzer;
    				cin.ignore(1);
    				getline(cin, Besitzer);
    				cat.setBesitzer(Besitzer);
    				cout << "\n";
    
    				cout << "Welches charakteristisches Geraeusch soll er denn machen?\n";
    				string charakteristisches_Geräusch;
    				getline(cin, charakteristisches_Geräusch);
    				string noise;
    				cat.setcharakteristisches_Geräusch(noise);
    				cout << "\n";
    
    				cout << "Wie gross soll denn die Katze werden?\n";
    				double Größe;
    				cin  >> Größe;
    				cat.setGröße(Größe);
    				cout << "\n";
    
    				cout << "Wie schwer soll er denn werden?\n";
    				double Gewicht;
    				cin  >> Gewicht;
    				cat.setGewicht(Gewicht);
    				cout << "\n";
    
    				cout << "Wie viele Mäuse soll denn Ihre Katze fangen?\n";
    				double Anzahl_Mäuse_fangen;
    				cin  >> Anzahl_Mäuse_fangen;
    				cat.setAnzahl_Mäuse_fangen(Anzahl_Mäuse_fangen);
    				if(Anzahl_Mäuse_fangen>0)
    					cout << "Dann macht es Sinn, dass Sie sich eine Katze anschaffen.\n";
    				else
    					cout << "Dann macht es keinen Sinn, sich eine Katze anzuschaffen.\n";
    			}
    		case 4:
    			{
    				Vogel bird;
    
    				cout << "Sie haben sich fuer einen Vogel entschieden!\n";
    				cout << "\n";
    
    				cout << "Wie soll er denn heissen?\n";
    				string name;
    				cin  >> name;
    				bird.setName(name);
    				cout << "\n";
    
    				cout << "Wer soll denn der Besitzer sein?\n";
    				string Besitzer;
    				cin.ignore(1);
    				getline(cin, Besitzer);
    				bird.setBesitzer(Besitzer);
    				cout << "\n";
    
    				cout << "Welches charakteristisches Geraeusch soll er denn machen?\n";
    				string charakteristisches_Geräusch;
    				getline(cin, charakteristisches_Geräusch);
    				string noise;
    				bird.setcharakteristisches_Geräusch(noise);
    				cout << "\n";
    
    				cout << "Wie gross soll denn der Vogel werden?\n";
    				double Größe;
    				cin  >> Größe;
    				bird.setGröße(Größe);
    				cout << "\n";
    
    				cout << "Wie schwer soll er denn werden?\n";
    				double Gewicht;
    				cin >> Gewicht;
    				bird.setGewicht(Gewicht);
    				cout << "\n";
    
    				cout << "Welche Fluggeschwindigkeit soll denn Ihr Vogel haben?\n";
    				double Fluggeschwindigkeit;
    				cin  >> Fluggeschwindigkeit;
    				bird.setFluggeschwindigkeit(Fluggeschwindigkeit);
    				if (Fluggeschwindigkeit < 20)
    					cout << "Das ist in Ordnung.\n";
    				else
    					cout << "Das ist zu schnell fuer einen Vogel als Haustier!\n";
    
    			}
    		}		
    	}while(number!=0);
    
    	return 0;
    }
    

    Eine Veränderung in der Header Datei "Vogel.h" habe ich wie folgt vorgenommen:

    #pragma once
    #include "Haustier.h"
    #include <string>
    using namespace std;
    
    class Vogel : public Haustier
    {
    private:
    	double Fluggeschwindigkeit;
    public:
    	Vogel(void);
    	~Vogel(void);
    
    	double getFluggeschwindigkeit();
    	void setFluggeschwindigkeit(double);
    };
    

    Bloß tritt jetzt der Fehler auf, dass nicht wieder zum Menü zurück gesprungen wird, egal was ich eingebe.

    Ich sehe wirklich den Fehler nicht mehr... Kann mir einer von euch vielleicht helfen, indem er über den Code mal drüber schaut?

    Danke für die Antworten im Voraus.

    Gruß

    Max



  • Wenn du Funktionen kennst, dann packe bitte diverse Zusammenhänge in eine Funktion, um die Übersicht zu bewahren.

    Aber was mir aufgefallen ist: wählst du eines der Haustiere, dann wird alles bis zum nächsten break ausgeführt. Aber da sind keine breaks also wird auch ALLES ausgeführt. Wählst du (1)Hund, dann werden auch alle anderen ausgeführt. Wahrscheinlich nicht das, was du willst.



  • silent_max schrieb:

    cout << "Was wollen Sie denn mit dem Hund machen?\n";
    				string Gassi_gehen;
    				cin  >> Gassi_gehen;
    				Dog.set_Gassig_gehen (Gassi_gehen);
    				if (Gassi_gehen == Gassi_gehen)
    					cout << "Sie wollen also mit Ihrem Hund Gassi gehen\n";
    				else
    				{
    					cout << "Wozu schaffen Sie sich einen Hund an,";
    				    cout << "wenn Sie mit ihm nicht Gassi gehen wollen!\n";
    				}
    

    Das macht definitiv nicht das, was du willst...



  • Nathan schrieb:

    Das macht definitiv nicht das, was du willst...

    Ja stimmt, es endet in einer Endlosschleife... Hm ...


Anmelden zum Antworten