Struct Daten an eine Funktion übergeben



  • Hallo,

    ich möchte mit einer Funktion Daten in einer Struktur speicher. Jedoch kann ich der Funktion nicht Meier.Bestellungen übergeben, da ich immer den Fehler bekomme, das diese nicht initialisiert ist. Wenn ich es aber mit einem Wert initialisiere habe ich an der Nullten Stelle immer meinen Init Wert stehen, den ich eigentlich garnicht brauche. Kann man der Funktion auch den Namen zu meiner Struktur als reinen String übergeben und Ihn dann für die pushback Zuweisung nutzen?

    Dazu habe ich mal folgendes Bsp gemacht um mein Problem zu zeigen.

    struct Bestelldaten_struct
    {
    	string name;
    	vector<std::string> Bestellungen;
    }
    Meier,
    Müller,
    Schulze;
    
    
    void DatenZuweisen(vector<std::string> BestellDetails, vector<std::string> BestellDaten)
    {
    	for (unsigned int i = 1; i < BestellDetails.size(); i++)
    	{
    		BestellDaten.push_back(BestellDetails[i]);
    	}
    }
    
    
    int main(int argc, char* argv[])
    {
    	.....
    
    	DatenZuweisen(BestellDetails, Meier.Besetellungen)
    
    
    	.....
    }
    


    1. poste kompilierbare Beispiele, oder zumindest solche, in denen nur der Fehler auftritt, den du selbst nicht lösen kannst. In deinem Beispiel fehlen alle Includes und die Datentypen der STL sind nicht qualifiziert.

    Hier dein korrigierter Quelltext, kompiliert ohne Fehler:

    #include <string>
    #include <vector>
    
    struct Bestelldaten_struct
    {
       std::string name;
       std::vector<std::string> Bestellungen;
    }
    Meier,
    Mueller,
    Schulze;
    
    
    void DatenZuweisen( std::vector<std::string> BestellDetails, std::vector<std::string> BestellDaten)
    {
       for (unsigned int i = 1; i < BestellDetails.size(); i++)
       {
          BestellDaten.push_back(BestellDetails[i]);
       }
    }
    
    int main(int argc, char* argv[])
    {
       std::vector<std::string> BestellDetails;
       DatenZuweisen(BestellDetails, Meier.Bestellungen);
    }
    

    Bist du sicher, dass du die Parameter per value übergeben willst?



  • @Ollom

    da ich immer den Fehler bekomme, das diese nicht initialisiert ist

    Fehlermeldung: Copy&Paste.



  • Habe den eigentlichen Fehler gefunden. Manchmal muss man nur die Fehlermeldung richtig lesen 😟 Trotzdem Danke für die schnelle Antwort.

    Was meinst du mit per Value übergeben? Soll ich eher einen Pointer draus machen?



  • @Ollom
    Nein. Ich hab keine Ahnung, was deine Funktion machen soll und was du hinterher mit dem Ergebnis anstellen willst, aber um einen std::vector als Kopie zu übergeben ist in den meisten Übungsaufgaben nicht richtig.

    Nachtrag:
    Warum machst du das von Hand? Deutlich effizienter geht das über die insert Methode von std::vector. Und wird das erste Element beim Kopieren tatsächlich ignoriert?

    int main(int argc, char* argv[])
    {
       std::vector<std::string> BestellDetails;
       if( !Meier.Bestellungen.empty() )
       {
          BestellDetails.insert( BestellDetails.end(), Meier.Bestellungen.begin() +1, Meier.Bestellungen.end() );
          // oder
          BestellDetails.assign( Meier.Bestellungen.begin() +1, Meier.Bestellungen.end() );
       }
    }
    


  • @Ollom: Wenn sich das übergebene Argument verändern soll, dann solltest du Referenzen (&) benutzen:

    void DatenZuweisen(vector<std::string> BestellDetails, vector<std::string> & BestellDaten)
    

    Und falls ein Parameter nur gelesen werden soll, dann verwende const:

    void DatenZuweisen(const vector<std::string> BestellDetails, vector<std::string> & BestellDaten)
    

Anmelden zum Antworten