Die 10.000 Zeiger-Frage



  • Ich habe eine Klasse MyString mit dem Attribut id mit dem Konstruktor:

    MyString::MyString(string s) {
    	MyString::id = s;
    }
    

    Nun will ich den Vector mit MyStrings füllen

    string s = "test";
    vector<MyString> v;
    v.push_back(new MyString(s));
    

    Nur funktioniert das so nicht! 😞 Ich kann ja zur Laufzeit nicht immer eine Variable anlegen, die ich dann in den Vector packen kann.

    Ich habs wohl mit den Zeigern immer noch nicht gecheckt.

    Mit dem Adressoperator & bekomme ich doch die Adresse eines Objektes. In Variablen mit * kann ich diese Adressen speichern. Wenn ich jetzt mit "new" etwas erzeuge, steht dann an der Stelle nicht die Adresse des erzeugten Objektes? Und dürfte nicht der Vector nachher nicht in jedem Feld sozusagen die Adresse der MyString-Objekte stehen?

    Wie kann ich denn mein Problem in C++ lösen? Meine Lösung beruht natürlich wieder aufgrund von Java-Kenntnissen. Aber habe keine Ahnung wie ich das sonst machen soll. Mit & und * habe ich schon alles versucht, aber nur Fehlermeldungen...



  • Man merkt, du bist Javaist!!!

    string s = "test";
    vector<MyString> v;
    MyString str(s);
    v.push_back(str);
    

    Kein new nötig!

    vector<MyString> v; sagt, das du keine Pointer speicherst, sondern Objekte. In C++ mußt du zwischen Objekte und Pointer unterscheiden. In C++ werden Klassen wie build-in Typen (int, long usw.) behandelt. Und umgekehrt auch. Das ist in Java nicht so: da hast du ne Trennung zwischen build-in und Klassen.

    http://www.kharchi.de/cppratgeber1.htm
    Pointer-Tutorial: http://www.c-plusplus.net/forum/viewtopic-var-t-is-124532.html



  • Ahh, prima! Von dem ganzen Zeiger, Adressen und new- gelese, was ich wohl immer noch nicht drauf habe, hab ich schon nix mehr gesehen. Ich hatte plötzlich wieder die Idee, dass man mit new die Objekte erzeugt, aber dem ist ja natürlich nicht so.

    Auch wenn man es nicht merkt, langsam gehts bergauf. Die erste Datenbankanbindung funktioniert schon und ein kleines Programm ist auch schon fertig. 😉 Thx again für Deine Hilfe!



  • Um eine Kopie zu vermeiden kann man hier auch

    v.push_back(MyString(s));
    

    schreiben.



  • Jep, so funktionierts! 🙂


Anmelden zum Antworten