#1 15. September 2005 Hey ho Leute! Kann mir mal jemand sagen, warum C++ bei Strings in Klassen Zuweisungen a la Code: char Name[9]; Name = "OnkelTom"; nicht akzeptiert? Ohne Klassen funzt es 1A (siehe oben), aber mit Klasse kommt bei der Zuweisung immer der Fehler "Linker Operand muss ein L-Wert sein". Hier der Code: Code: #include <iostream.h> class Person { public: char Name[9]; }; int main() { Person Dieter; // So gehts nicht, aber so will ich es Dieter.Name = "OnkelTom"; /* So gehts Möglichkeit 1, aber so will ichs nicht Dieter.Name[0] = 'O'; Dieter.Name[1] = 'n'; Dieter.Name[2] = 'k'; Dieter.Name[3] = 'e'; Dieter.Name[4] = 'l'; Dieter.Name[5] = 'T'; Dieter.Name[6] = 'o'; Dieter.Name[7] = 'm'; Dieter.Name[8] = '\0'; */ /* So gehts Möglichkeit 2, aber so will ichs nicht cin >> Dieter.Name; */ cout << Dieter.Name << endl; return 0; } Übrigens funktioniert die Zuweisung nach Möglichkeit 1 oder 2 tadellos, nur halt so wie ich es will, will es nicht Ich hoffe mich kann mal jemand aufklären, warum C++ bei Strings in Klassen diese seltsame Ausnahme macht! Dankö :] + Multi-Zitat Zitieren
#2 15. September 2005 Probier mal so: class Person { public: char* Name; }; int main() { Person* Dieter = new Person(); // So gehts nicht, aber so will ich es Dieter->Name = "OnkelTom"; cout << Dieter->Name << endl; return 0; } Bei mir hats geklappt. + Multi-Zitat Zitieren
#3 15. September 2005 Okelli Dokelli, so gehts schonmal fein Is aber trotzdem komisch, dass man Strings in Klassen nicht wie "normale" Strings behandeln kann, sondern den 'Umweg' übern Zeiger gehen muss! Aber ich dank dir schonmal!! Leider hab ich dir schonmal ne 10 gegeben! + Multi-Zitat Zitieren
#4 16. September 2005 Wenn's keiner tut: Der Code ist illegal und hat undefiniertes Verhalten. Wo hast du denn Speicher für deine Zeichenkette angelegt? ... Nirgends.. Du schreibt also in fremden Speicher, der dir nicht gehört. Mein Tipp wäre für dich: Nimm std::string aus <string>-Header und deine ganzen Probleme sind weg. Intern wird zwar auch mit einem char-Array gearbeitet, aber du hast keine Probleme mehr mit Speicherfreigabe und den gamzem Kram.. Bsp: Code: #include <string> int main() { std::string str; str = "test"; // alles ok hier, keine Probleme } Ahja: Nimm die neuen Headers anstatt die mit einer ".h" Endung, wir leben nun in 2005. so long + Multi-Zitat Zitieren
#5 17. September 2005 Code: class Person { public: char Name[9]; }; Ich dachte das reicht als Speicherzuweisung aus? Der Konstruktor weiß dadurch doch, dass er für jedes Element der Klasse "Person" ein Feld mit 9 char Variablen anlegen muss!?!?!??! + Multi-Zitat Zitieren