ist meine .cpp richtig?



  • ryhne schrieb:

    if(0<=anzahlInsassenAktuell<=3)
    

    Achtung!

    Probiere doch mal verschiedene Werte von anzahlInsassenAktuell durch. Du wirst dich wundern, was passiert.

    Übersetze bitte IMMER mit Warnungen! Da sollte sowas wie

    warning: comparisons like ‘X<=Y<=Z’ do not have their mathematical meaning

    herauskommen.

    0<=anzahlInsassenAktuell ergibt einen bool, diesen vergleichst du dann erneut. Das ist Murx. Du musst 2 einzelne Tests machen und die mit && verbinden.



  • Danke für eure Antworten!
    hier was ich bis jetzt geschrieben habe:

    #include "Fahrzeug.h"
    #include <string>;
    
    using namespace std;
    
    Fahrzeug :: Fahrzeug(string name ,int anzahlInsassenMaximal, int anzahlInsassenAktuell)
    {
        string name = "StandardFahrzeug" ;
        int anzahlInsassenMaximal = 3;
        int anzahlInsassenAktuell =1;
        printStatus();
    }
    Fahrzeug (int A)
    {
    //muss ich hier nur Variablen schreiben, die ich oben genannt habe? (anzahlInsassenAktuell)oder muss ich die Einsteiger und Aussteiger noch dazu addieren? :confused:  :confused: 
        int anzahlInsassenAktuell=A;
    
    }
    
    int einsteigen(int anzahlEinsteiger)
    {
        int anzahlInsassenAktuell=anzahlInsassenAktuell+anzahlEinsteiger ;
        if(anzahlInsassenAktuell<=3) && (anzahlInsassenAktuell>=0)
            return 0;
        else
        {
            cout << "Einsteigen nicht moeglich, da zu wenig Platz im Fahrzeug! \n" ;
            return -1;
        }
    }
    int aussteigen(int anzahlAussteigen)
    {
        int anzahlInsassenAktuell=anzahlInsassenAktuell- anzahlAussteigen ;
        if (anzahlInsassenAktuell >=0)
        {
            if (anzahlAussteigen<=anzahlInsassenAktuell) && (anzahlAussteigen>=0)
                return 0;
        }
        else
        {
            cout << " So viele Insassen sind nicht im Auto! \n";
            return -1;
        }
    }
    void printStatus()
    {
    //Gleiche Frage wie oben! muss ich hier Einsteiger und Aussteiger auch addieren? :confused: 
        cout << " Die aktuelle Anzahl der Insassen beträgt: " << anzahlInsassenAktuell << "\n";
        cout << " Die maximale Anzahl der Insassen für eine Standardfahrzeug beträgt: " << anzahlInsassenMaximal << "\n";
    
    }
    


  • ryhne schrieb:

    Fahrzeug :: Fahrzeug(string name ,int anzahlInsassenMaximal, int anzahlInsassenAktuell)
    {
        string name = "StandardFahrzeug" ;
        int anzahlInsassenMaximal = 3;
        int anzahlInsassenAktuell =1;
        printStatus();
    }
    

    Was ist das für ein Blödsinn?

    Es gibt dort bei dir 3 Variablen mit dem Namen name : die Member-Variable, den Parameter und noch die lokale Variable! Überleg dir mal, was du da tust!

    Ansonsten: du musst den Code auch mal compilieren, der Compiler wird einiges zu meckern haben.



  • wob schrieb:

    Ansonsten: du musst den Code auch mal compilieren, der Compiler wird einiges zu meckern haben.

    👍

    @rhyne
    Die Forumsteilnehmer hier sind kein online-fehlerbehebender-Compiler!
    Besorg Dir einen Compiler und schau Dir dessen Ausgaben an.



  • Die Forumsteilnehmer hier sind kein online-fehlerbehebender-Compiler!
    Besorg Dir einen Compiler und schau Dir dessen Ausgaben an.

    @Furble Wurble

    Ich bin ein Mac-user und ist schwer einen Windows-Rechner zu finden.
    Ich habe meinen letzten Code auf einem Blank Page geschrieben, deswegen gab es im meinen letzten Code Fehler, die ich nicht bemerkt habe.
    Ich glaube auch nicht, dass die Forumsteilnehmer "online-fehlerbehebender-Compiler" sind!!



  • ryhne schrieb:

    Ich bin ein Mac-user und ist schwer einen Windows-Rechner zu finden.

    Gibts für einen Mac keinen Compiler?



  • Ich hab' den Code jetzt nur schnell überflogen, aber ich sehe da auf den 1. Blick mal nix wofür man Windows brauchen würde 😕
    Wieso nimmst du nicht einfach eine Entwicklungsumgebung die auch unter OS X läuft? Sollte ja einige geben.

    Soweit ich weiss ist XCode im Moment gratis - das wäre das was ich als 1. probieren würde wenn ich auf nem Mac entwickeln müsste.

    Sonst gibt es z.B. noch eine ältere Version von Code::Blocks - und bestimmt noch viele andere IDEs die auch unter OS X laufen.



  • außerdem gibt es auch diverse online compiler.
    für nette kleine und forumsgerechte codestückchen sollte man sowas eigentlich immer verwenden. z.b. http://rextester.com/l/cpp_online_compiler_clang



  • hier, weil ich lieb bin, kannst du, @OP, die fehler deines codes laut compiler sehen.

    #ifndef FAHRZEUG_H
    #define FAHRZEUG_H
    #include <string>
    #include <iostream>
    using namespace std;
    class Fahrzeug
    {
    public:
    /*
    Standardkonstruktor. Erstellt ein Fahrzeug mit den Werten:name=Standarfahrzeug,
    anzahlInsassenMaximal = 3, anzahlInsassenAktuell = 1
    */
    Fahrzeug();
    /*
    Erstellt ein Fahrzeug und übernimmt die gegebenen Parameter als Memebervariablen
    */
    Fahrzeug(string name, int anzahlInsassenMaximal, int anzahlInsassenAktuell);
    ~Fahrzeug();
    protected:
    string name; // Name des Fahrzeugs
    int anzahlInsassenMaximal; // Anzahl der Insassen, die Maximal in das Fahrzeug passen
    int anzahlInsassenAktuell; // Anzahl der Insassen, die aktuell im Auto sind
    public:
    /* Methode "
    int einsteigen(int anzahlEinsteiger);"
    erhöht "anzahlInsassenAktuell" um "anzahlEinsteiger";
    gibt 0 zurück, wenn genug Platz für die einsteigenden Insassen ist.
    Wenn die "anzahlEinsteiger" aufgrund des maximalen Platzes im Fahrzeug
    nicht mehr in das Fahrzeug passt, gibt die Methode "einsteigen" -1 zurück,
    schreibt auf die Konsole "Einsteigen nicht möglich, da zu wenig Platz im
    Fahrzeug!"
    und verändert die aktuelle Anzahl der Insassen des Fahrzeugs nicht.
    */
    int einsteigen(int anzahlEinsteiger);
    /* Methode "int aussteigen(int anzahlAussteiger);"
    verringert "anzahlInsassenAktuell" um "anzahlAussteiger";
    gibt 0 zurück, wenn mindestens so viele Insassen im Fahrzeug sind, wie
    aussteigen sollen.
    Diese Methode verhindert damit, dass mehr Insassen aussteigen, als tatsächlich
    im Fahrzeug sind.
    Somit ist gewährleistet, dass "anzahlInsassenAktuell" größer oder gleich 0 ist.
    Wenn weniger Insassen als "anzahlAussteiger" im Fahrzeug sind, gibt die Methode
    "aussteigen" -1 zurück,
    schreibt auf die Konsole "So viele Insassen sind nicht im Auto!"
    und verändert die aktuelle Anzahl der Insassen des Fahrzeugs nicht.
    */
    int aussteigen(int anzahlAussteiger);
    /*
    Diese Methode gibt die Werte ALLER der Membervariablen in einer verständlichen
    Form auf der Konsole aus.
    Z.B.: "Die aktuelle Anzahl der Insassen beträgt: <hier steht der Wert von
    anzahlInsassenAktuell>"
    */
    void printStatus();
    };
    #endif // !FAHRZEUG_H
    
    #include <string>
    
    using namespace std;
    
    Fahrzeug :: Fahrzeug(string name ,int anzahlInsassenMaximal, int anzahlInsassenAktuell)
    {
        string name = "StandardFahrzeug" ;
        int anzahlInsassenMaximal = 3;
        int anzahlInsassenAktuell =1;
        printStatus();
    }
    Fahrzeug (int A)
    {
    //muss ich hier nur Variablen schreiben, die ich oben genannt habe? (anzahlInsassenAktuell)oder muss ich die Einsteiger und Aussteiger noch dazu addieren? :confused:  :confused:
        int anzahlInsassenAktuell=A;
    
    }
    
    int einsteigen(int anzahlEinsteiger)
    {
        int anzahlInsassenAktuell=anzahlInsassenAktuell+anzahlEinsteiger ;
        if(anzahlInsassenAktuell<=3) && (anzahlInsassenAktuell>=0)
            return 0;
        else
        {
            cout << "Einsteigen nicht moeglich, da zu wenig Platz im Fahrzeug! \n" ;
            return -1;
        }
    }
    int aussteigen(int anzahlAussteigen)
    {
        int anzahlInsassenAktuell=anzahlInsassenAktuell- anzahlAussteigen ;
        if (anzahlInsassenAktuell >=0)
        {
            if (anzahlAussteigen<=anzahlInsassenAktuell) && (anzahlAussteigen>=0)
                return 0;
        }
        else
        {
            cout << " So viele Insassen sind nicht im Auto! \n";
            return -1;
        }
    }
    void printStatus()
    {
    //Gleiche Frage wie oben! muss ich hier Einsteiger und Aussteiger auch addieren? :confused:
        cout << " Die aktuelle Anzahl der Insassen beträgt: " << anzahlInsassenAktuell << "\n";
        cout << " Die maximale Anzahl der Insassen für eine Standardfahrzeug beträgt: " << anzahlInsassenMaximal << "\n";
    
    }
    
    int main () {}
    

    ausgabe:

    Error(s):
    
    source_file.cpp:64:12: error: redefinition of 'name'
        string name = "StandardFahrzeug" ;
               ^
    source_file.cpp:62:29: note: previous definition is here
    Fahrzeug :: Fahrzeug(string name ,int anzahlInsassenMaximal, int anzahlInsassenAktuell)
                                ^
    source_file.cpp:65:9: error: redefinition of 'anzahlInsassenMaximal'
        int anzahlInsassenMaximal = 3;
            ^
    source_file.cpp:62:39: note: previous definition is here
    Fahrzeug :: Fahrzeug(string name ,int anzahlInsassenMaximal, int anzahlInsassenAktuell)
                                          ^
    source_file.cpp:66:9: error: redefinition of 'anzahlInsassenAktuell'
        int anzahlInsassenAktuell =1;
            ^
    source_file.cpp:62:66: note: previous definition is here
    Fahrzeug :: Fahrzeug(string name ,int anzahlInsassenMaximal, int anzahlInsassenAktuell)
                                                                     ^
    source_file.cpp:69:11: error: expected unqualified-id
    Fahrzeug (int A)
              ^
    source_file.cpp:69:11: error: expected ')'
    source_file.cpp:69:10: note: to match this '('
    Fahrzeug (int A)
             ^
    source_file.cpp:79:37: error: expected identifier
        if(anzahlInsassenAktuell<=3) && (anzahlInsassenAktuell>=0)
                                        ^
    source_file.cpp:92:57: error: expected identifier
            if (anzahlAussteigen<=anzahlInsassenAktuell) && (anzahlAussteigen>=0)
                                                            ^
    source_file.cpp:104:63: error: use of undeclared identifier 'anzahlInsassenAktuell'
        cout << " Die aktuelle Anzahl der Insassen beträgt: " << anzahlInsassenAktuell << "\n";
                                                                 ^
    source_file.cpp:105:90: error: use of undeclared identifier 'anzahlInsassenMaximal'
        cout << " Die maximale Anzahl der Insassen für eine Standardfahrzeug beträgt: " << anzahlInsassenMaximal << "\n";
                                                                                           ^
    9 errors generated.
    


  • ryhne schrieb:

    Ich glaube auch nicht, dass die Forumsteilnehmer "online-fehlerbehebender-Compiler" sind!!

    Das wollte ich Dir auch nicht unterstellen, sondern Dich vielmehr vor dem Mißverständnis bewahren.
    Die Motivation der Teilnehmer hier, Dir beim lernen zu helfen, geht nämlich ziemlich schnell gegen 0 sonst.

    Ganz zu schweigen von Deiner eigenen Motivation, wenn Du Deinen Kram nicht ausprobieren kannst und schnell Rückmeldungen von einem echten Compiler erhältst.



  • Ich habe Xcode schon probiert.
    aber es gibt einige Unterschiede.
    Nach jeder Copy-paste muss ich viele kleinigkeiten ändern und da ich 5 Dateien habe, dauert es zu viel!(und die Header Dateien darf ich nicht ändern!)
    anyways
    danke für eure Antworten
    ich glaube ich habe's geschafft! 🙂

    #include "Fahrzeug.h"
    #include <string>;
    
    Fahrzeug :: Fahrzeug()
    {
         name = "StandardFahrzeug" ;
         anzahlInsassenMaximal = 3;
         anzahlInsassenAktuell =1;
    }
    Fahrzeug::Fahrzeug (string name ,int anzahlInsassenMaximal, int anzahlInsassenAktuell)
    {
        this -> name=name;
        this -> anzahlInsassenMaximal=anzahlInsassenMaximal;
        this-> anzahlInsassenAktuell=anzahlInsassenAktuell;
    
    }
    Fahrzeug::~Fahrzeug()
    {
    }
    
    int Fahrzeug::einsteigen(int anzahlEinsteiger)
    {
        anzahlInsassenAktuell=anzahlInsassenAktuell+anzahlEinsteiger ;
        if(anzahlInsassenAktuell<=3)
            return 0;
        else
        {
            cout << "Einsteigen nicht moeglich, da zu wenig Platz im Fahrzeug! \n" ;
            return -1;
        }
    }
    int Fahrzeug::aussteigen(int anzahlAussteigen)
    {
        anzahlInsassenAktuell=anzahlInsassenAktuell- anzahlAussteigen;
            if (anzahlAussteigen<=anzahlInsassenAktuell)
            {
                return 0;
            }
        else
        {
            cout << " So viele Insassen sind nicht im Auto! \n";
            return -1;
        }
    }
    void Fahrzeug::printStatus()
    {
        cout << " Der Name des Fahrzeugs: " << name << endl;
        cout << " Die aktuelle Anzahl der Insassen betraegt: " << anzahlInsassenAktuell << endl;
        cout << " Die maximale Anzahl der Insassen betraegt: " << anzahlInsassenMaximal << endl;
    
    }
    


  • ryhne schrieb:

    Ich habe Xcode schon probiert.
    aber es gibt einige Unterschiede.
    Nach jeder Copy-paste muss ich viele kleinigkeiten ändern und da ich 5 Dateien habe, dauert es zu viel!(und die Header Dateien darf ich nicht ändern!)

    Das sollte aber eigentlich nicht so sein - welche Kleinigkeiten musst Du ändern? Beispiel?

    Und welches Copy&Paste?

    Achte darauf, dass wenn Du verschiedene Compiler benutzt, z.B. i.d. Uni/Schule und zu hause, dass Du mit dem gleichen C++ Standard übersetzt.

    C++14 wäre super. C++11 mindestens.

    Aktivier alle Warnungen.

    ryhne schrieb:

    anyways
    danke für eure Antworten
    ich glaube ich habe's geschafft! 🙂

    Ja.
    Die Tests in aus/einsteigen würde ich vor die Veränderung der Member machen. (steht auch so im Kommentar in Header Fahrzeug.h )
    D.h. bei einer falschen Anzahl passiert dem Fahrzeug erstmal nix.


Anmelden zum Antworten