Fehler
-
Hi!
Ich habe zwei Ortobjekte erstellt mit Hilfe des Makros damit es nicht so viel Tipparbeit ist!
Jetzt will ich aber in main den name vom ersten Ort einlesen und das klappt auch! Auch die Ausgabe danach!
Aber wenn ich das ganze Objekt auf das zweiter Ort-Objekt kopieren will, gibt es den Fehler!
Ich habe etwas von Zuweisungs- und Copy-methoden gehört! Muss man die erstellen für sowas wenn ja wo?
Habe sehr viel Erfahrung in C aber mit C++ komme ich noch nicht so ganz zurecht!
#define ORT(X) class Ort##X \ { \ public: \ char* name; \ };\ ORT(1) ORT(2) int main() { Ort1 *o1 = (Ort1*)malloc(sizeof(Ort1)); o1->name = new char[100]; string s; cin>>s; strcpy(o1->name, s.c_str()); printf(o1->name) Ort2 *o2 = o1; //Fehler! cout<<o2->name<<endl; }Danke!
-
So erstellst du dir zwei verschiedene Klassen, eine mit Namen Ort1 und eine mit Namen Ort2, und nicht zwei verschieden Objekte vom typ Ort. Das ginge so:
class Ort { public char* Name; } int main() { Ort o1, o2; }So sind jetzt zwei Objekte vom Typ Ort erstellt worden.
Ort1 und Ort2 sind von vorneherein komplett unterschiedliche Typen, deswegen kannst du die auch nicht gegenseitig zuweisen.Zusätzlich solltest du dir noch mal grundsätlich was über Objektorientiertes Programmieren aneigen. Das was du machst sollte so zwar gehen, ist aber ziemlich schlechter Stil. (sSoll nicht böse gemeint sein, aber OO ist halt nunmal was grundsätlzich neues, wenn man von C kommt...)
-
probiere es mal so:
#include <iostream> #include <string> class Ort { public: Ort(std::string ort_name) : ort_name_(ort_name) { } std::string name() const { return ort_name_; } private: std::string ort_name_; }; int main() { Ort ort1("Berlin"); Ort ort2("Hamburg"); std::cout << "ort1 " << ort1.name() << " ort2: " << ort2.name() << std::endl; }wenn du das jetzt so als vorlage nimmst und verstehst, kannst du darauf aufbauen.
und wenn du jetzt in c++ prgrammierst, vermische c und c++ am beste nicht. z.B. gibt es in c++ statt malloc/free new/delete, aber in deinem fall brauchst du das gar nicht dynamisch, also lass es einfach weg.
-
CaptainC schrieb:
Habe sehr viel Erfahrung in C
Das bezweifle ich.
-
krümelkacker schrieb:
CaptainC schrieb:
Habe sehr viel Erfahrung in C
Das bezweifle ich.
Wieso?
-
Versuch das Ganze mal mit struct statt class, das hier wäre die C-Variante (ohne Einlesen des strings):
#define ORT(X) typedef struct Ort_##X \ { \ public: \ char* name; \ } Ort##X;\ ORT(1) ORT(2) int main() { Ort1 *o1 = (Ort1*)malloc(sizeof(Ort1)); o1->name = (char*)malloc(100); strcpy(o1->name, "meh"); printf(o1->name) Ort2 *o2 = o1; //Fehler! }Den Tippfehler den du drin hast (bei mir kommts schon vor der Zuweisung zum Fehler) hab ich dir mal dringelassen. Die Speicherlecks auch.
christian99 schrieb:
krümelkacker schrieb:
CaptainC schrieb:
Habe sehr viel Erfahrung in C
Das bezweifle ich.
Wieso?
Weil dir die Fehlermeldung dann normalerweise was sagen sollte.
Wenn du C++ lernen willst, mach bitte folgendes: vergiss erstmal den ganzen C-Krempel. malloc, printf, strcpy haben in C++ erstmal so garnichts zu suchen. Und dann lies dir bitte die Links in meiner Signatur durch und halte dich daran, dann kann dir besser geholfen werden. Und besorg dir ein ordentliches C++-Lehrbuch (Links gibts in den FAQ), damit du dir garnicht erst den Endachtziger "C-mit-Klassen" Stil angewöhnst.
-
CaptainC schrieb:
Fehler
Antwort

Ein aussagekräftiger Titel wäre wohl zu viel verlangt gewesen.
Mich überrascht die Gutmütigkeit der Moderatoren immer wieder.