Wo liegt hier der Fehler?
-
Hallo!
Hab eben mal dieses einfache Beispielprogramm für Klassen geschrieben:#include<iostream>
using namespace std;class int
{
public:int er;
int sie;double multiplizieren()
{
er * sie;
};int main()
{
int du,ich;du.er = 20;
du.sie = 20;ich.er = 20;
ich.sie = 20;cout<<multiplizieren()<<endl;
return 0;
Der Compiler gibt immer zwei Fehlermeldungen aus:
Error E2275 test.cpp 6: { expected
Error E2040 test.cpp 35: Declaration terminated incorrectly
******2 errors in compile **********Leider weiß ich nicht, was ich da mal wieder falsch gemacht habe

-
a) Benutze bitte die Code-Tags, dass kann ja kein Mensch lesen
b) Als erstes würde ich anfangen, die Klassendeklaration in eine entsprechende Header-Datei auszulagern. Das ist auch sehr viel übersichtlicher.Außerdem fahlen mind. 2 geschweifte Klammern.
-
also wenn das wirklich der code ist der so im editor steht, naja dann..augen auf!
3 öffnende geschweifte klammern und 1 schließende?
deine double funktion multipliziert, gibt aber nix zurück! return...!
wobei allgemein die klassse wohl eher schlecht ist!
member sollten private und nur über public-methoden zugänglich sein (setter, getter methoden)
teilung in header und code-dateiwäre auch angebracht(solang nicht template)schau dir am besten nochmal ein tutorial oder gutes buch durch!
-
Ich hab heut irgendwie nen guten tach und wollte das Klassenwissen was ich mir gestern angearbeitet habe einfach mal ausprobieren

#include <cstdlib> #include <iostream> using namespace std; //klasse class Zahlen { public: //Steinigt mich, ich habs jetzt einfachheitshalber ma public gelassen int er; int sie; //Funktionen der Klasse double multiplizieren(); };//ende Zahlen double Zahlen::multiplizieren() { int Ergebnis = er*sie; return Ergebnis; } int main() { //Lokale Variablendeklaration Zahlen du,ich; //Initialisierung du.er = 20; du.sie = 20; ich.er = 20; ich.sie = 20; //Aufruf der Funktion und Ausgabe cout<<ich.multiplizieren()<<endl; cout<<du.multiplizieren()<<endl; system("PAUSE"); return 0; }Hab die Membervariablen einfach mal public gelassen, sonst müsst ich doch einen Konstruktor zur initialisierung verwenden und ich glaub das wäre zu komplex, oder irre ich mich da wieder?
ser1al schrieb:
schau dir am besten nochmal ein tutorial oder gutes buch durch!
Kann ich nur zustimmen, empfehle dir aber wärmstens ein Buch

Kann man, bei uns zumindest, auch in der Bibliothek ausleihen.
Ausserdem kommentier deinen Quelltext mal besser, vorallem wenn du ihn ins Forum stellst und immer schön der code-tag verwenden

Edit:
Ach das mit dem public hat mir jetzt keine Ruhe gelassen xD hier nochma mit Konstruktor#include <cstdlib> #include <iostream> using namespace std; //klasse class Zahlen { private: int er; int sie; public: //Funktionen der Klasse double multiplizieren(); Zahlen(); };//ende Zahlen //Konstruktor Zahlen::Zahlen () { er=20; sie=20; } double Zahlen::multiplizieren() { int Ergebnis = er*sie; return Ergebnis; } int main() { //Lokale Variablendeklaration Zahlen du,ich; //Aufruf der Funktion und Ausgabe cout<<ich.multiplizieren()<<endl; cout<<du.multiplizieren()<<endl; system("PAUSE"); return 0; }
-
Weedjo schrieb:
Hab die Membervariablen einfach mal public gelassen, sonst müsst ich doch einen Konstruktor zur initialisierung verwenden und ich glaub das wäre zu komplex, oder irre ich mich da wieder?
Wenn du in derartigen Beispielen daran zweifelst, ob du einen Ctor in deine Klasse einbauen solltest, solltest du auch daran zweifeln, ob du dann überhaupt Klassen verwenden solltest...

Merke: Ziel der OOP ist es modularen, in sich abgeschlossenen Code zu entwickeln! Dies verhinderst du, indem du die - nur von der Klasse zu verwaltenden Daten - public machst.Ach das mit dem public hat mir jetzt keine Ruhe gelassen xD hier nochma mit Konstruktor
Gut. :).
Allerdings frage ich mich, warum du den Ctor nicht (mindestens) so aussehen lässt:Zahlen::Zahlen(int lhs, int rhs) { er = lhs; sie = rhs; }Und btw: Schau dir mal die Initialisierungslisten an. In diesem (zudem nicht besonders glücklich gewählten) Beispiel würden sie dir zwar nur Schreibarbeit sparen, aber in anderen Beispielen sind (und tlw. müssen) sie der obigen Methode vorzuziehen (vorgezogen werden!).
Gruß, Caipi
-
aber nur einen default ctor der werte mit 20 initialisiert würde ich nicht!
da lieber mit 0 und dann sowas hier:Zahlen::Zahlen(int _er, int _sie):er(_er),sie(_sie) { }Edit: ganz schön zu spät

-
Entschuldigt bitte, dass in meinen Codes immer so viele Fehler drin sind, aber ich bin halt absoluter Abfänger auf dem Gebiet C++.Bin gerade dabei, ein Buch für Anfänger durch zu arbeiten und da bin ich eben bei dem Kapitel Klassen.
Trotzdem vielen Dank für die zahlreichen Hinweise und Tipps
-
Johnie16 schrieb:
Entschuldigt bitte, dass in meinen Codes immer so viele Fehler drin sind, aber ich bin halt absoluter Abfänger auf dem Gebiet C++.Bin gerade dabei, ein Buch für Anfänger durch zu arbeiten und da bin ich eben bei dem Kapitel Klassen.
hm...weiß nicht ob das buch dann so gut ist!
denn normaleriweise sollte man zumindest mit funktionen umgehen können, wenn man zu den klassen kommt! oder?
-
Johnie16 schrieb:
Entschuldigt bitte, dass in meinen Codes immer so viele Fehler drin sind, aber ich bin halt absoluter Abfänger auf dem Gebiet C++.Bin gerade dabei, ein Buch für Anfänger durch zu arbeiten und da bin ich eben bei dem Kapitel Klassen.
Hmm ich hab hier auch gerade nen Buch rumliegen und ich bin auch gerade beim kapitel Klassen. Aber du hast wirklich elementare Fehler gemacht. Solltest dir vielleicht nochmal die Kapitel davor ein wenig gründlicher angucken
