struct aus STL komponenten zurückgeben
-
Hi,
struct Pair{ explicit Pair ( std::string, std::string ); std::string Name; std::string DNS; }; Pair::Pair ( std::string Name, std::string DNS ){ this->Name = Name; this->DNS = DNS; } struct Information{ std::string Version; std::vector < std::string > Path; std::vector < Pair > Servers; };so sieht meine datenstuktur aus, und jetzt will ich die dann nachdem die befüllt wurde zurückgeben...
std::vector < Information >* IniFile::ReadIniFile (){ std::string Line; std::vector < Information > * Infs = new std::vector < Information>; ... return Infs; }nur bleibt dann im hauptprogramm die...
vector < Information >* Inform = Reader.ReadIniFile();leer.
was mache ich da falsch?
-
mh
müsste nicht am ende deiner funktion
return &Infs;heissen?
du willst ja einen zeiger zurückgeben
ein zeiger ist ja eigendlich nur die addresse des objektes im speicher...so wie dus bis jetzt gemacht hast hast du das objekt zurückgegeben
mit dem & gibts du nur die addresse zurückaber achtung !
denk an das delete am ende, zu jeden new gehört ein delete
-
&Infs würde die adresse meines zeigers zurückgeben, ich will aber die adresse meines objekts im speichers zurückgeben, bin mir relativ sicher das dass stimmt.
-
eghs.. habs ^^
Reader.ReadIniFile(); vector < Information > * Inform = Reader.ReadIniFile();stand in meinem programm ^^ da war klassenintern schon der positionszeiger des filestreams am eof ^^...
-
Noch einige Anmerkungen zu deinem Code:
struct Pair{ // explicit eigentlich nicht nötig, aber aus Konsistenzgründen okay // Klassentypen sollten nicht per Value, sondern per Const-Referenz übergeben werden! explicit Pair ( std::string, std::string ); std::string Name; std::string DNS; }; Pair::Pair ( std::string Name, std::string DNS ){ // für diese Zuweisungen gäbe es die Initialisierungsliste. // Zudem rate ich dir, Parameter und Member nicht gleich zu benennen. this->Name = Name; this->DNS = DNS; }Also zum Beispiel so:
Pair::Pair(const std::string& Name, const std::string& DNS) : MyName(Name) // das ist die Initialisierungsliste , MyDNS(DNS) // Member haben jetzt z.B. ein My-Präfix { // Konstruktorrumpf bleibt leer }Statt des My-Präfixes kannst du auch m_ oder irgendwas nehmen. Alternativ kannst du die Membernamen so belassen und bei den Parameter etwas verändern (z.B.
NewName, NewDNS).