Konstruktor für Felder (C++)



  • Folgendes Problem.
    Ich habe eine Klasse:

    typedef unsigned long int uli_t; //Typedef wegen Faulheit

    class Person_c { //Klasse Person_c

    private:

    uli_t id; //Identifikationsnummer
    String_c vname; //Vorname (Instanz der Klasse String_c)
    String_c nname; //Nachname (Instanz der Klasse String_c)

    public:

    Person_c( const String_c &nname_,const String_c &vname_ = "",const uli_t id_ = 1);
    Person_c( const Person_c &per ); //Copy-Konstruktor
    const Person_c& operator = ( const Person_c& per ); //Wertzuweisung
    };

    Bisher habe ich im Hauptprogramm zur Verwaltung von mehreren Personen ein Array gebaut.
    Person_c Personen[5] = {Person_c(""),Person_c(""),Person_c(""),Person_c(""),Person_c("*"),};

    Ich wollte dieses Feld nun dynamisch machen.
    Allerdings scheiter ich bereits an einem Default Konstruktor, der ein Feld initialisiert.
    Also zum Beispiel, dass ich einfach nur schreiben brauch:
    Person_c Personen[5];

    Wenn ich das nämlich dynamisch lösen möchte brauch ich doch so einen Konstruktor für meinen Dynamischen Bereich.
    Meinetwegen:
    Person_c *Personen = new Person_c [10];

    Kann mir vielleicht jemand sagen ob das überhaupt geht? und wenn ja wie?

    Vielen Dank.

    grüße peter



  • Hallo,

    also Person = new Person_c[10]; holt erstmal nur Speicher für 10 Person_c Objekte. Die einzelnen Objekte kannst du mit Person[0-9] = Person_c("*"); zu weisen.
    Löschen musst du das Array am Ende natürlich auch mittels delete [] Person;

    Dein operator =() sollte auch nur Person_C& zurückgeben - also ohne const.



  • Danke für die schnelle Antwort.

    Das habe ich mir auch auch gedachte.
    Ich hab in meiner Main also geschrieben:

    Person_c *myArray;
    myArray = new Person_c[10];

    Ich kommt nicht mal zum initialisieren.
    Mein Compiler spuckt vorher folgende Fehlermeldung aus:

    Cannot find default constructor to initialize array element to type 'Person_c'

    Wie sieht denn dieser Konstruktor aus?



  • Entschuldigung, hab mich irgendwie verlesen. Das was du machen möchtest geht soweit ich weiß nicht mit dynamischen Arrays.

    Du kannst aber nen std::vector nehmen, welcher dir auch die Speicherverwaltung abnimmt:

    {
      std::vector<Person_c> Person(10, Person_C("*"));
    }
    


  • Habs gelöst. Danke. Good night.


Anmelden zum Antworten