Leerer Vector als defaultwert
-
Hallo,
ich habe ein kleines Problem bei der Erstellung eines constructors fuer ein struct (sollte ja gehen, struct=class ausser bez. default public und default private, soweit ich weiss) Und eben diesem Constructor soll ein vector uebergeben werden, der auf leer defaulted wird.
Konkret sieht das struct folgendermassen aus:
struct item{ std::string name,description; int dkpprozent,dkp; std::vector<std::string> owner; item(const std::string& n,int dp,const std::string& des="",const std::vector<std::string>& o=/*hier das Problem*/,int d=0); }Tja, und nun sollte nach Moeglichkeit ein leerer vector als default argument uebergeben werden, da eben dieser vector in den meisten Faellen beim deklarieren einer Variablen vom Typ item leer sein wird. Und ich habe gerade leider keine Ahnung wie ich das angebe.
Gibt es da irgendeine Moeglichkeit? Oder muss ich 2 Constructoren schreiben? (waere ja jetzt nicht so das Problem, aber mich hat das jetzt einfach mal interessiert obs geht)PS: dumme nebenfrage: heisst es eigentlich allgemein "das struct" was ich jetzt intuitiv genutzt hab, oder eher die struct wegen "die Struktur"
-
wenn du einen vector oder rigend ein objekt per referenz übergeben willst, musst du diese ja vor deinem item objekt erzeugen..
std::vectorstd::string objekt;
.
.
.
.dein item aufruf;
item(..,..., objekt); //Geht
das wäre ja ein leeres Vektor den du übergibst!!
item(...,....,0); // Geht nicht (leere Vektor)
hoffe das hast du gemeint!!
-
hmm, wie sieht eigentlich der constructor vom std::vector aus?
Ich hab gerade jetzt erst dran gedacht... vielleicht ginge ja sowas wie const std::vectorstd::string v() (dann halt natuerlich ohne referenz)
Oder ließe sich das mit Pointern machen? std::vectorstd::string* pv=0. Würde das als default argument gehen? (mit dem gewünschten effekt natürlich) Selbstverständlich muss ich dann eine Referenz übergeben.
-
const std::vector<std::string>& V = std::vector<std::string>()
-
mit pointer gehts auch.. da bruachst aber nen kopiekonstruktor!! aber denke der ist bei vektor impelemntiert!!!
itme(...,...,const std::vector<std:string> *p) : owner(*p){ . . . }
-
In dem Fall kannst du aber keinen 0-Zeiger übergeben, was das ganze für die gegebene Problemstellung ziemlich nutzlos macht.
-
weis nich.. überprüft der copy konstruktor nicht ob der poiter null ist?
-
BorisDieKlinge schrieb:
weis nich.. überprüft der copy konstruktor nicht ob der poiter null ist?
Der Copykonstruktor wird garnicht erreicht. Beim vorherigen Versuch des Dereferenzieren eines Null-Zeigers wirds schon knallen