Konstruktor Problem ! [Gelöst] Danke für die Hilfe !
-
Hallo liebe Community ich habe ein Problem, und zwar:
Ich möchte gerne einen Konstruktor starten der meine Werte zu Anfang inizialisiert das wäre nun dieser "//Konstruktor ohne Parameter liste" leider wird dieser nicht aufgerufen sobald ich mit einem zweiten Konstruktor arbeite der eine Parameterliste gebraucht dieser: "//Konstruktor mit Parameterliste".Meine Frage ist nun, wie kann ich die beiden Konstruktoren verwenden ohne das Sie sich im Weg stehen ?
#include <iostream> using namespace std; //Maximale höhe & breiten Grade const int max_high = 800; // x const int max_length = 600; // y //Klasse 'CRaumschiff' class CRaumschiff { private: int xPos; int yPos; int Energy; float Geschwindigkeit; public: CRaumschiff(); CRaumschiff(const int x, const int y); void ZeigeDaten(); }; //Konstruktor ohne Parameter liste CRaumschiff::CRaumschiff() { cout << "Konstruktor (ohne Parameterliste) wurde aufgerufen." << endl; xPos = 0; yPos = 0; Energy = 1000; Geschwindigkeit = 0; cout << "Werte wurden inizialisiert." << endl; }; //Konstruktor mit Parameterliste CRaumschiff::CRaumschiff(const int x, const int y) { if(x < 0 || x > max_high || y < 0 || y > max_length) { cout << "Deine Koordinaten sind nicht auffindbar !" << endl; xPos = 0; yPos = 0; cout << "Koordinaten wurden auf 0:0 gesetzt." << endl; }else { xPos = x; yPos = y; cout << "Koordinaten wurden erfolgreich gesetzt." << endl; } }; //Ausgabe der Daten void CRaumschiff::ZeigeDaten() { cout << endl; cout << "x: " << xPos << endl; cout << "y: " << yPos << endl; cout << "Energy: " << Energy << endl; cout << "Geschw: " << Geschwindigkeit << endl; cout << endl; } //Hauptprogramm int main() { //Erschaffen einer Instanz / Setzen der Koordinaten CRaumschiff A(700, 100); A.ZeigeDaten(); system("PAUSE"); return 0; }
-
Erklär mal bitte genauer, was du erwartest.
In C++ rufen Konstruktoren sich nicht gegenseitig auf (zumindest nicht automatisch, ab C++11 kannst du das manuell machen), falls du das meinst.
-
So wie ich das kenne werden Konstruktoren automatisch aufgerufen wenn eine neue Instanz der Klasse erstellt wird.
Ich will das der erste Konstruktor also der erste deklarierte konstruktor (von oben nach unten gelesen) als erstes ausgeführt wird wenn ich eine neue Instanz der Klasse erstelle.
Danach soll der zweite deklarierte konstruktor (von oben nach unten gelesen)aktiviert werden.
Noch genauer kann ich es nur anhand von Bildern ausdrücken sry

-
CRaumschiff::CRaumschiff(const int x, const int y) : CRaumschiff() //ruft den Parameterlosen Konstruktor aus { ... };Es gibt keinen automatischen Mechanismus, der alle Konstruktoren in irgendeiner Reihenfolge aufruft, das musst du selbst festlegen. Außerdem ist es so gedacht, dass ein Objekt mit jedem beliebigen Konstruktor erstellt werden kann.
-
CRaumschiff::CRaumschiff(const int x, const int y) : CRaumschiff()Funktioniert nicht mir wird ein Fehler unter y) : " CRaumschiff()" angezeigt.
Fehler: ""CRaumschiff"" ist kein nicht statischer Datenmember bzw. nicht statische Basisklasse von ""CRaumschiff""
-
Ich habe nun das Problem erkannt, ich habe durch meine angaben in der Paramenterliste der neuen Instanz immer wieder den Konstruktor mit der Parameterliste ausgewählt.
-
NULLFaktor schrieb:
CRaumschiff::CRaumschiff(const int x, const int y) : CRaumschiff()Funktioniert nicht mir wird ein Fehler unter y) : " CRaumschiff()" angezeigt.
Fehler: ""CRaumschiff"" ist kein nicht statischer Datenmember bzw. nicht statische Basisklasse von ""CRaumschiff""
Das ist schade. Delegating Constructors sind relativ neu, dein Compiler scheint das noch nicht zu können. Vielleicht möchtest du dir einen aktuelleren besorgen?
Die Alternative ist, dass die eine Memberfunktion init schreibst, die von allen Konstruktoren aufgerufen wird.