Bitte um Hilfe
-
chrische5 schrieb:
Hallo
Ist doch wunderbar, dass du es alleine gelöst hast.
chrische
Dem entnehme ich jetzt einfach mal das ich die Lösung wohl gefunden habe.
Ich möcht dabei mal auf eine Compiler Warnung zu sprechen kommen die mein dev-C++ immer ausgibt.
32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
Ich kann damit jetzt nicht so richtig was anfangen, worüber beschwert er sich nun?
EDIT: Danke für den Link, das werd ich mal durch lesen!
-
Hallo
Mach mal das .h nach iostream weg. Schreib also einfach
#include <iostraem>uns schreibst dann noch
using namespace std;drunter und alles wird gut. Du kannst alternativ ber auch immer:
std::coutund so weiter schreiben.
chrische
-
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 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