Problem: Strings in Klassen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von OnkelTom, 15. September 2005 .

Schlagworte:
  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ö :]
     
  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.
     
  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!
     
  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
     
  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!?!?!??!

     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.