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); // OkNun 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

-
-
-
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 nochresize(size_type length, const_reference val);...bb
