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ück

    aber 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 ).


Anmelden zum Antworten