Array von Instanzen anlegen, Konstruktor mit Parametern...



  • Hallo,

    habe folgendes Problem. Eine Klasse Gaga ist so geschrieben, dass der Standardkonstruktor absichtlich private und nicht implementiert ist. Hier Gaga.h:

    class Gaga
    {
        private:
            // Private and not implemented
            Gaga();
            ...
            // Some data
            int m_a;
            int m_b;
    
        public:
            Gaga(int a, int b);
    };
    

    Und Gaga.cpp:

    Gaga::Gaga(int a, int b) :
        m_a(a),
        m_b(b)
    {
    }
    

    Nun kann ich ja folgendes kompilieren bzw. nicht kompilieren:

    Gaga Table;    // Compiler error: Gaga() ist private
    
    Gaga Table(1, 2);    // Ok
    

    Nun möchte ich ein Array anlegen:

    #define MAX_TABLES    10u
    
    Gaga Table[MAX_TABLES];    // Compiler error :(
    

    Der Compiler weigert sich, wie erwartet, die Zeile zu kompilieren. Weiss jemand von C++ Profis, ob es eine Möglichkeit gibt, ohne Gaga zu ändern, Arrays davon anzulegen?
    So was geht ja z.B. nicht:

    Gaga Table[MAX_TABLES](0, 0);    // Compiler error :(
    

    Stehe irgendwie auf dem Schlauch 😕





  • Badestrand schrieb:

    Geht nich.

    Danke schön für die Aufklärung und den guten Link! 👍



  • Wenn du STL-Container verwendest, hast du dieses Problem nicht. Dann kannst du zum Beispiel

    std::vector<Gaga> Vec(4, Gaga(1, 2));
    Vec.push_back(Gaga(5, 3))
    

    schreiben, solange deine Klasse kopierbar ist.



  • Nexus schrieb:

    Wenn du STL-Container verwendest, hast du dieses Problem nicht. Dann kannst du zum Beispiel

    std::vector<Gaga> Vec(4, Gaga(1, 2));
    Vec.push_back(Gaga(5, 3))
    

    schreiben, solange deine Klasse kopierbar ist.

    hmmm ich hatte so in Erinnerung, dass std::vector-Elemente auch default-konstruierbar sein müssten. Ist das falsch?

    Gruß,

    Simon2.



  • Simon2 schrieb:

    ich hatte so in Erinnerung, dass std::vector-Elemente auch default-konstruierbar sein müssten

    Da es auch auf oben genanntem Link als Alternative vorgeschlagen wird und mir kein Grund einfallen sollte, wieso das so sein sollte, hattest du es offenbar falsch in Erinnerung ^^

    bb



  • unskilled schrieb:

    Simon2 schrieb:

    ich hatte so in Erinnerung, dass std::vector-Elemente auch default-konstruierbar sein müssten

    Da es auch auf oben genanntem Link als Alternative vorgeschlagen wird und mir kein Grund einfallen sollte, wieso das so sein sollte

    Wie wäre es mit std::vector<>::resize() ?



  • Aber nur, wenn man resize(size_type) verwenden möchte ^^ außerdem gibts ja auch noch resize(size_type length, const_reference val); ...

    bb


Anmelden zum Antworten