std::vector<foo> erwartet ein Standart- Konstuktor der Klasse foo?
-
fazit:
wenn es keinen standardkonstruktor gibt, kann man bei bedarf einfach ein kopierbares "standard-objekt" bei vector verwenden:#include <vector> #include <iostream> using namespace std; typedef int bar_type; class foo { public: foo(bar_type &bar) :m_bar(&bar) {} const bar_type &getBar() const { return *m_bar; } void setBar(bar_type &bar) { m_bar = &bar; } private: bar_type *m_bar; }; int main() { bar_type b1 = 0; foo defaultFoo(b1); vector<foo> test(2, defaultFoo); bar_type b2; test[1] = b2; b2 = 3; cout << test[0].getBar() << endl; cout << test[1].getBar() << endl; }
-
wiesoweshalbwarum schrieb:
...
und ich depp dachte, der op meinte damit, ein vector würde einen standard konstruktor vorraussetzen, was definitiv nicht stimmt, weil lediglich ein zuweisungsoperator benötigt wird ...Selbst das stimmt ja nicht, solange er es sich verkneift, den vector zu füllen. :p
Ich bin halt davon ausgegangen, dass der OP die ganze Funktionialität von vector nutzen können möchte - hielt ich jetzt für naheliegender als die Beschränkung auf push_back() mit einem kaputten operator=().
wiesoweshalbwarum schrieb:
...das ist mir schon klar. ...
dann ist ja gut. Aber Du wirst vermutlich zugeben, dass ich unmöglich ahnen kann, was Du weißt und was nicht.
wiesoweshalbwarum schrieb:
...damit sich m_bar nach einer zuweisung auf ein anderes objekt beziehen kann, muss es in foo intern als zeiger verwaltet werden,...
... was ja der Eingangsvorschlag des OPs war und seine Frage war, ob es noch Alternativen gäbe.
Gruß,
Simon2.
-
Simon2 schrieb:
wiesoweshalbwarum schrieb:
...damit sich m_bar nach einer zuweisung auf ein anderes objekt beziehen kann, muss es in foo intern als zeiger verwaltet werden,...
... was ja der Eingangsvorschlag des OPs war und seine Frage war, ob es noch Alternativen gäbe.
das ziel schien ein standardkonstruktor zu sein. dementsprechend wäre es eine alternative, auf einen standardkonstruktor zu verziechten und die schnittstelle von foo so zu lassen, wie sie ist.