Probleme mit Anlegen eines Objektes
-
Hallo zusammen !
ich möchte mir für ein Schulprojekt einen Fuhrpark schreiben mit Fahrzeug-Objekten die reingehängt bzw. rausgenommen werden können.
Um die Komplexität ein bisschen zu erhöhen will ich dann von den Fahrzeugen PKWs und LKWs ableiten, aber soweit bin ich noch nicht

Ich habe bisher ein Fahrzeug.h
#include <string.h> class Fahrzeug { public: Fahrzeug(char plate[8],int age, int performance); ~Fahrzeug(); void change_plate(char input[8]); void show_car(); private: Fahrzeug *next; char plate[9]; int age; int performance; };und die zugehörige CPP-File:
#include <iostream> #include <string.h> #include "Fahrzeug.h" using namespace std; Fahrzeug::Fahrzeug(char plate_in[],int age_in, int performance_in) { cout << "Neues Fahrzeug " << endl; strcpy(plate,plate_in); age = age_in; performance = performance_in; } Fahrzeug::~Fahrzeug() { cout << "Fahrzeug entfernt" << endl; } void Fahrzeug::change_plate(char input[]) { strcpy(plate,input); } void Fahrzeug::show_car() { cout << "test" <<endl; }Jetzt hab ich noch mein Haupt-File Fuhrpark.cpp in dem ich die Objekte anlegen und verwalten will
Wenn ich da drinnen aber jetzt ein Objekt mit anlegen will:
void main (){ Fahrzeug Auto1 = new Fahrzeug("SE-721",8,60); Auto1.show_car(); }bekomme ich immer eine Fehlermeldung mit der ich nichts anfangen kann:
D:\Fuhrpark\Fuhrpark.cpp(12) : error C2440: 'initializing' : 'class Fahrzeug *' kann nicht in 'class Fahrzeug' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutigIch hab aber keine Ahnung was da mehrdeutig sein kann bei einem derartigen Konstruktor ?

Vielleicht kann mir ja jemand einen Tip geben

Danke
Ringer
-
Der Operator new gibt dir __immer__ einen Pointer zurück.
Entweder du machst es also so: (Heap)
int main (){ Fahrzeug *Auto1 = new Fahrzeug("SE-721",8,60); Auto1->show_car(); }oder so: (Stack)
int main (){ Fahrzeug Auto1("SE-721",8,60); Auto1.show_car(); }
-
danke für die schnelle Antwort
gibt es eine Methode die zu bevorzugen ist ?
mein Ziel ist es ja eine Liste anzulegen, d.h. ich müsste die neuen Objekte immer irgendwie an den next-Zeiger des vorherigen Objektes einhängen.
In C# würd ich mir mit einer ArrayList helfen, aber wie mach ich das in C++ ?

Auto.next = new Fahrzeug("SE-721",8,60);oder
Auto.next = Fahrzeug Auto("SE-721",8,60);In diesem Fall wäre ja die ganze Liste nur über das Objekt Auto zugreifbar und wenn ich das erste Listenobjekt lösche müsse ich mir vorher den Zeiger auf das nächste Element setzen, oder ?
-
Korrektur - die zweite Zeile müsste lauten:
Auto.next = Fahrzeug tmp("SE-721",8,60);
-
#include <vector> /* ... */ std::vector<Fahrzeug> Fahrzeuge; Fahrzeuge.push_back(Fahrzeug("SE-721",8,60)); Fahrzeuge[0].show_car();Sowas? Dann musst du dich nicht selber um die Speicherverwaltung kümmern
-
das sieht ganz nett aus, danke
