Definition eines static vector als Klassenelement
-
Hallo,
ich habe eine Klasse foo, die in etwa so deklariert ist:class foo { public: foo(); //... private: vector<Item> v_inv; };
"Item" ist eine Struktur, die so ausschaut:
struct Item { string a; int b; bool c; int d; };
Da der vector v_inv als static deklariert ist, muß ich ihn ja definieren. Ich weiß allerdings nicht, wie die Definition auszusehen hat. Ich habe es so probiert:
foo::v_inv[0]={"",0,0,0};
aber das geht nat. nicht.
Würde mich freuen, wenn ihr mir da weiterhelfen könntet.
Grüße
E-the-Real
-
foo::v_inv[0]={"",0,0,0};
aber das geht nat. nicht.vielleicht ne funktion, die nen ensprechenden und gut gefüllten vector zurückgibt?
foo::v_inv=initThisGlobalVector();
-
hmmm, ich weiß nicht, wie die aussehen könnte. Ich habe folgendes probiert:
In der Klassendeklaration:class foo { //.... private: vector<Item> InitVector(void); };
...und die Implementierung:
vector<Item> Inventory::InitVector(void) { vector<Item> v; Item it={"",0,0,0}; v.push_back(it); return v; }
leading to:
error C2552: 'it' : Initialisierung nicht zusammengesetzter Typen mit Initialisierungsliste ist nicht moeglich
Scheint mir auch etwas merkwürdig...
Wie macht man das?
Thx
-
Ok, dieser Fehler ist leicht behoben. Aber ich weíß immer noch nicht, wie ich den Vector definiere.
Problem dazu: Vector soll am Anfang eigentlich kein Element enthalten, also leer sein.
Erst im weiteren Verlauf wird er gefüllt.
-
warum schreibst du dir nicht einfach einen Konstruktor? Ist ja eh kein POD mehr, wenn du std::string verwendest
-
// hpp class foo { private: static std::vector < Item > vec; /* ... */ }; // cpp std::vector < Item > foo::vec;
was auch immer
-
hmmm, ja, das geht, aber ich weiß immer noch nicht, wie ich den vector initialisere/definiere/whatever...
Wie muß das aussehen?
So?Item i={"",0,0,0}; foo::v_inv.pushback(i);
oder so?
foo::v_inv[0]={"",0,0,0};
oder wie? Beide Methoden haben bei mir nicht funktioniert. Weiterhin ist daran schlecht, dass dan v_inf schon ein Element besitzt.
Ich hoffe, ich konnte mich deutlich ausdrücken, wo mein Problem genau liegt...edit: @WasAuchImmer: Jepp, sowas habe ich in etwa gesucht. Hab gerade geschrieben, als du gepostet hast.
-
Nochmal eine kleine Verständnisfrage:
In der Klasse
class foo { private: static std::vector < Item > vec; };
wird ja vec nur deklariert.
Die Definitionstd::vector < Item > foo::vec;
, obwohl sie vec keinen Wert zuweist, belegt dann den entsprechenden Speicherplatz für vec, oder? Desw. geht also diese Definition ohne Zuweisung?
Wenn das so ist, dann hab ich's kapiert.
Dankeschön @all!
-
ethereal schrieb:
Nochmal eine kleine Verständnisfrage:
In der Klasse
class foo { private: static std::vector < Item > vec; };
wird ja vec nur deklariert.
Die Definitionstd::vector < Item > foo::vec;
, obwohl sie vec keinen Wert zuweist, belegt dann den entsprechenden Speicherplatz für vec, oder? Desw. geht also diese Definition ohne Zuweisung?
Wenn das so ist, dann hab ich's kapiert.
Dankeschön @all!Hier wird einfach der Std-Konstruktor aufgerufen und somit Speicher reserviert.
-
Alright. Aber wieviel Byte werden denn reserviert, wenn vec anfangs noch kein Element enthält?
-
das hängt von der Implementierung ab. Aber mit std::vector<>::reserve kannst du da ja beeinflussen, was je nachdem auch für ordentlich Speedup sorgen kann.
Wobei du zwischen einfach allokierten und belegten Speicher unterscheiden musst.