Bitte um Hilfe
-
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 statusIch 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!
