[gelöst] Erster Kontakt mit Klassen
-
Hallo!
Mein erster Kontakt mit Klassen macht mich traurig://Ort.h #ifndef ORT_H_INCLUDED #define ORT_H_INCLUDED class Ort { public: int getX() const; int getY() const; void aendern(int x, int y); void ausgabe() const; Ort(); //Eigener Standardkonstruktor private: int xKoord, yKoord; }; #endif // ORT_H_INCLUDED//Ort.cpp #include <iostream> #include "Ort.h" int Ort::getX() const {return xKoord;} int Ort::getY() const {return yKoord;} void Ort::aendern(int x, int y) { xKoord = x; yKoord = y; std::cout << "Ort-Objekt geaendert! x = " << xKoord << ", y = " << yKoord << std::endl; } void Ort::ausgabe() const { std::cout << "Das Objekt enthaelt die Koordinaten: x = " << xKoord << ", y = " << yKoord << std::endl; } Ort::Ort() { //Eigener Standardkonstruktor xKoord = 0; yKoord = 0; }//main.cpp #include <iostream> #include "Ort.h" int main() { Ort einOrt; einOrt.ausgabe; einOrt.aendern(3,7); return 0; }Bekomme folgende Fehlermeldung:
in main.cpp: line 8 error: statement cannot resolve adresse of overloaded functionWas hab ich denn nun wieder nich verstanden?
Danke für eure Hilfe!
-
Es muss heißen**
einOrt.ausgabe();**Gruß Blue-Tec
-
*hüsterchen* Dankeschön.

-
Ich habe jetzt einen allgemeinen Kontruktor geschrieben und bekomme seltsame ausgaben. Vlt. weiß da jemand Rat?
//main.cpp #include <iostream> #include "Ort.h" int main() { Ort einOrt(0,0); //einOrt.ausgabe(); einOrt.aendern(3,7); Ort nocheinOrt(2,4); //Gibt ganz andere Zahlen aus?! nocheinOrt.ausgabe(); return 0; }//Ort.cpp #include <iostream> #include "Ort.h" int Ort::getX() const {return xKoord;} int Ort::getY() const {return yKoord;} void Ort::aendern(int x, int y) { xKoord = x; yKoord = y; std::cout << "Ort-Objekt geaendert! x = " << xKoord << ", y = " << yKoord << std::endl; } void Ort::ausgabe() const { std::cout << "Das Objekt enthaelt die Koordinaten: x = " << xKoord << ", y = " << yKoord << std::endl; } /* Ort::Ort() { //Eigener Standardkonstruktor xKoord = 0; yKoord = 0; } */ Ort::Ort(int x, int y) { xKoord = x; xKoord = y; }//Ort.h #ifndef ORT_H_INCLUDED #define ORT_H_INCLUDED class Ort { public: int getX() const; int getY() const; void aendern(int x, int y); void ausgabe() const; //Ort(); //Eigener Standardkonstruktor Ort(int x, int y); private: int xKoord, yKoord; }; #endif // ORT_H_INCLUDED
-
Sorry, gefunden.
-
Ort::Ort(int x, int y) { xKoord = x; xKoord = y; }ist ok, aber besser ist:
Ort::Ort(int x, int y) : xKoord(x), yKoord(y) {} // oder sogar Ort::Ort(int x = 0, int y = 0) : xKoord(x), yKoord(y) {}rya.
-
Scorcher24 schrieb:
// oder sogar Ort::Ort(int x = 0, int y = 0) : xKoord(x), yKoord(y) {}Davon rate ich ab, da diese Konstruktordefinition es erlaubt, Objekte auf folgende Weise zu erstellen:
Ort a(5); // Wofür steht die 5? x=5? y=5? Warum nur eine Koordinate? Ort b = 7; // WTF?
-
Zwar Offtopic aber das mit den Paramtern haben sie in Python gut gelöst, da kann man angeben welchen Parameter man meint, wenn man nur einen übergibt aber mehrere gefordert werden. Auch die Reihenfolge ist dort nicht wichtig. Gibt es da in C++ einen Ansatz sowas mal mit einzubauen?
Gruß Blue-Tec
-
blue-tec schrieb:
Gibt es da in C++ einen Ansatz sowas mal mit einzubauen?
Du weisst ja: Was einem C++ nicht als Sprachfeature bietet, kann man mit Template-Metaprogrammierung nachbauen.

Ein paar Boostler haben das sogar tatsächlich getan: Boost.Parameter
Über Vorschläge, so ein Feature in die Sprache einzubauen, ist mir hingegen nichts bekannt.
-
Die sind ja verrückt die Boostler

Danke für den Hinweis.