Bitte um Hilfe



  • Erstmal vielen dank für die Hilfe.

    Ich hab nun mal probeweise ein kleine Programm geschrieben und hab hier nun ein Problem, erstmal der Code:

    #include <iostream>
    using namespace std;
    
    class Ressourcen
    {
    
                    public:
                           Ressourcen (int Arbeiter);
                           ~Ressourcen() {}
    
                           int Metall(int Metall, int Arbeiter)
                           {
                             itsMetall = Metall; 
                             itsMetall = Arbeiter * 3;
                             return itsMetall;
                           }
    
                           int Sillizium(int Sillizium, int Arbeiter)
                           {
                              itsSillizium = Sillizium;
                              itsSillizium = Arbeiter * 2;
                              return itsSillizium;
                           }                                      
    
                           int Deuterium(int Deuterium, int Arbeiter)
                           {
                               itsDeuterium = Deuterium;
                               itsDeuterium = Arbeiter * 1;
                               return itsDeuterium;    
                           }
    
                           void SetArbeiter(int Arbeiter) 
                           { 
                              itsArbeiter=Arbeiter; 
                           }
    
                           int GetMetal() const { return itsMetall; }
                           int GetSillizium() const { return itsSillizium; }
                           int GetDeuterium() const { return itsDeuterium; }
    
                    private:
    
                            int itsArbeiter;
                            int itsMetall;
                            int itsSillizium;
                            int itsDeuterium;
    };
    
    main()
    {
          Ressourcen MyRessourcen(int Arbeiter);
    
          int Arbeiter;
    
          cin >>Arbeiter;
          MyRessourcen.SetArbeiter(int Arbeiter);
    
          return 0;
    }
    

    Wieso kann ich keine werte an SetArbeiter übergeben? Was mach ich den da falsch?

    P.S

    Ich habe mir mittlerweile das Tutorial ein wenig angesehen, und finde es im großen und ganzen garnicht schlecht, aber der Autor beschreibt kaum was er da gerade tut bzw. warum.

    Ist das ganze eher ein Tutorial für fortgeschrittene?

    Im großen und ganzen auf jedenfall sehr hilfreich! 👍



  • Hi,

    Erstmal int main()...auch wenn dein Compiler int bei fehlendem Typen annimmt ist das nicht Standard!

    so isses richtig (du hast Typen gesetz, wo keine hingehören):

    int main()
    {
          int iArbeiter, iAndererArbeiter;
    
          cin >> iArbeiter;
          Ressourcen MyRessourcen(iArbeiter);
    
          // ein anderer Arbeiter:
          cin >> iAndererArbeiter;
    
          MyRessourcen.SetArbeiter(iAndererArbeiter);
    
          return 0;
    }
    


  • Moin,

    vielen dank für die schnelle hilfe, scheint nun soweit alles richtig zu sein, aber nun meckert der linker rum!

    Fehlermeldung:
    [Linker error] undefined reference to `Ressourcen::Ressourcen(int)'
    ld returned 1 exit status

    Ich verwende übrigens Dev_C++.

    #include <iostream>
    using namespace std;
    
    class Ressourcen
    {
    
                    public:
                           Ressourcen (int Arbeiter);
                           ~Ressourcen() {}
    
                           int Metall(int Metall, int Arbeiter)
                           {
                             itsMetall = Metall; 
                             itsMetall = Arbeiter * 3;
                             return itsMetall;
                           }
    
                           int Sillizium(int Sillizium, int Arbeiter)
                           {
                              itsSillizium = Sillizium;
                              itsSillizium = Arbeiter * 2;
                              return itsSillizium;
                           }                                      
    
                           int Deuterium(int Deuterium, int Arbeiter)
                           {
                               itsDeuterium = Deuterium;
                               itsDeuterium = Arbeiter * 1;
                               return itsDeuterium;    
                           }
    
                           void SetArbeiter(int Arbeiter) 
                           { 
                              itsArbeiter=Arbeiter; 
                           }
    
                           int GetMetal() const { return itsMetall; }
                           int GetSillizium() const { return itsSillizium; }
                           int GetDeuterium() const { return itsDeuterium; }
    
                    private:
    
                            int itsArbeiter;
                            int itsMetall;
                            int itsSillizium;
                            int itsDeuterium;
    };
    
    int main()
    {
          int ersterArbeiter, Arbeiter;
    
          cin >> ersterArbeiter;
          Ressourcen MyRessourcen(ersterArbeiter);
    
          cin >>Arbeiter;
          MyRessourcen.SetArbeiter(Arbeiter);
    
           system("PAUSE");
        return 0;
    }
    


  • Du hast den Konstruktor von Ressourcen ja auch nicht definiert.



  • Braunstein schrieb:

    Du hast den Konstruktor von Ressourcen ja auch nicht definiert.

    lol, jo...
    Hab ich gar nicht drauf geachtet...also der muss so aussehen:

    // in der Klasse unter public:
    Ressourcen (int iArbeiter) { itsArbeiter = iArbeiter; }
    


  • Du hältst wohl nichts von Initialisierungslisten?

    Ressourcen (int iArbeiter) : itsArbeiter(iArbeiter) {}
    


  • Du hältst wohl nichts von Initialisierungslisten?

    Elementinitialisierer heißen die...lol...ne halte ich nicht :p



  • Initialisierungsliste
    ändere deine Meinung lieber. Glaub mir, es ist besser so. 🙂



  • Hm also mein C++ Buch sagt: Elementinitialisierer...aber is summa sumarum auch wuRscht 🤡



  • Vielen dank für die Hilfe!

    Nun läuft das ganze soweit, nur hab ich aus irgendeinem grund einen Pufferüberlauf 😞

    Ich hab jetzt ne ganze weile versucht den fehler zu finden, aber ich kann ihn nirgends entdecken!

    Hätte nicht gedacht das mir wen ich das gelernte mal anwende so viele fehler unterlaufen, wo es doch eigentlich etwas ganz simples ist 😕

    Ressourcen.hpp

    #include <iostream>
    using namespace std;
    
    class Ressourcen
    {
    
                    public:
                           Ressourcen::Ressourcen(int init_Arbeiter){ itsArbeiter=init_Arbeiter; }
                           ~Ressourcen() {};
    
                           int Metall()
                           {
                             int Metall = itsArbeiter;
                             itsMetall = (Metall * 3);
                             return itsMetall;
                           }
    
                           int Sillizium()
                           {
                              int Sillizium = itsArbeiter;
                              itsSillizium = (Sillizium * 2) ;
                              return itsSillizium;
                           }                                      
    
                           int Deuterium()
                           {
                               int Deuterium;
                               Deuterium = itsArbeiter;
                               itsDeuterium  = (Deuterium * 1);
                               return itsDeuterium;    
                           }
    
                           void SetArbeiter(int Arbeiter) 
                           { 
                              itsArbeiter=Arbeiter; 
                           }
    
                           int GetMetall() const { return itsMetall; }
                           int GetSillizium() const { return itsSillizium; }
                           int GetDeuterium() const { return itsDeuterium; }
                           int GetArbeiter() const { return itsArbeiter; }
    
                    private:
    
                            int itsArbeiter;
                            int itsMetall;
                            int itsSillizium;
                            int itsDeuterium;
    };
    

    Ressourcen.cpp

    #include "Ressourcen.hpp"
    
    int main()
    {
    
    int init_Arbeiter;
    
     cout << "Geben sie die Anzahl der Arbeiter ein: ";
     cin >> init_Arbeiter;
     Ressourcen MyRessourcen(init_Arbeiter);
    
         cout << "Ihre Arbeiter erwirtschaften " << MyRessourcen.GetMetall() <<" Metall, ";
         cout << MyRessourcen.GetSillizium() << " Sillizium, und \n" << MyRessourcen.GetDeuterium()<< " Deuterium." << endl;
         cout << "Anzahl der Arbeiter: " << MyRessourcen.GetArbeiter() <<endl;
         system("PAUSE");
        return 0;
    }
    

    P.S

    Der Pufferüberlauf betrifft nur die Ressourcen, itsArbeiter bleibt unverändert bei dem was ich über cin eingebe.



  • Also ersten weiß ich nicht, ob wir unter Pufferüberlauf das gleiche verstehen, und zweitens ist es sinnvoller, da man einen Pufferüberlauf (=Speicherzugriffsverletzung) so sehr schwer erkennen kann, wenn du mit nem Debugger ans Werk gehst...Beschreib mal deinen Fehler genauer 😉

    Wo tritt der Fehler genau auf ?



  • Hehe, ok 😉

    Also der Wertebereich wird überschritten, so wie es aussieht.

    Geben sie die Anzahl der Arbeiter ein: 100
    Ihre Arbeiter erwirtschaften 2008948848 Metall, -1 Sillizium, und
    2009055971 Deuterium.
    Anzahl der Arbeiter: 100
    Drücken Sie eine beliebige Taste . . .

    Ich hab schon nach nem debugger gesucht, aber entweder ich bin blind oder da gibts keinen 😕



  • Ich hab schon nach nem debugger gesucht, aber entweder ich bin blind oder da gibts keinen

    Welchen Compiler hasse denn ?



  • Bloodshed Dev-C++ 🙂



  • Vielleicht solltest du die internen Variablen auch mal initialisieren. In denen steht jetzt nämlich nur Müll drin. Wozu hast du diese anderen Funktionen erzeugt (Deuterium() usw.). Aufrufen tust du sie ja nicht.
    PS. Silizium schreibt man mit einem l.



  • ach mist, ich hab die funktionen im programm code nicht aufgerufen.

    Da rächt es sich das ich so früh angefangen hab was zu versuchen. Dachte doch glatt das das auch so automatisch berechnet wird.

    #include "Ressourcen.hpp"
    
    int main()
    {
    
    int init_Arbeiter;
    
     cout << "Geben sie die Anzahl der Arbeiter ein: ";
     cin >> init_Arbeiter;
     Ressourcen MyRessourcen(init_Arbeiter);
    
        MyRessourcen.Metall();
        MyRessourcen.Deuterium();
        MyRessourcen.Sillizium();
         cout << "Ihre Arbeiter erwirtschaften " << MyRessourcen.GetMetall() <<" Metall, ";
         cout << MyRessourcen.GetSillizium() << " Sillizium, und \n" << MyRessourcen.GetDeuterium()<< " Deuterium." << endl;
         cout << "Anzahl der Arbeiter: " << MyRessourcen.GetArbeiter() <<endl;
         system("PAUSE");
        return 0;
    }
    


  • Warum sollten die automatisch aufgerufen werden. Mein Tipp, schmeiß diese Funktionen raus oder mach sie zumindest private und initialisiere deine Variablen im Konstruktor sowie in SetArbeiter.



  • Vielen dank für eure Hilfe!

    Ich werde jetzt erstmal weiterlernen und dann demnächst das ganze mal besser machen, das war ja nur ein erster praxistest ob ich mit dem was ich gelernt habe schon was anfangen kann und vor allem ob ich mit den klassen den auch umgehen kann.

    Das ganze hat mir gezeigt das ich noch ne menge lernen muss, und das werde ich auch tun 😉

    Aber wenigstens gibts hier ein Forum, das einem mit rat und tat zur seite steht.

    Schönen Abend wünsch ich!

    muffin



  • Muffin888 schrieb:

    Das ganze hat mir gezeigt das ich noch ne menge lernen muss, und das werde ich auch tun 😉

    TOP!, Hut Ab! 👍


Anmelden zum Antworten