struct array funktion übergeben



  • Fensterscheibe schrieb:

    Aber wie ich sehe ich das, die oder der struct nun global, sprich für jeden zugänglich. Das sollte man doch möglichst verhindern oder nicht?

    Ja, das Prinzip dahinter heißt Kapselung und macht man durch private Daten.

    Und warum ist der Rückgabetyp der Funktion data? Damit das in das, die oder der struct geschrieben wird?

    Das ist nur ein Beispiel, das ist nicht wirklich so wenn du einen Konstruktor schreibst.

    Und mein letzte Frage
    Was hat es mit diesen foo & bar auf sich? Ich lese das so oft hier kann das aber nicht zuordnen 😃 Oder wurde das einfach weitergetragen und hat eigendlich gar keinen Sin?

    Nein, das macht keinen Sinn: http://de.wikipedia.org/wiki/Metasyntaktische_Variable





  • Okay also ich muss nochmal fragen ^^
    So schnell werdet ihr mich nicht los haha 😃

    So ich habe versucht nun euer Hilfe zusammen zu fügen aber ohne Erfolg...

    struct data {
        string username;
        string password;
    };
    
    void make_data(std::string const& username, std::string const& password){
    
      user.username = username;
      user.password = password;
    
    }
    
    int main(){
        std::vector<data> users;//Das habe ich einfach kopiert...
    
        string username="foo";
        string password="bar";
    
        data user;
        make_data(username, password);
    
        return 0;
    }
    

    Ich weiß das der Vector gar nicht hochgezählt wird, und gar nicht so wirklich eine Verbindung herrscht. Ich bekomme es aber auch nicht besser hin :s

    Und mein Wunsch war halt einen "User" mit Passwort und Benutzernamen anlegen zu können.


  • Mod

    void make_data(std::string const& username, std::string const& password){
     
      user.username = username;
      user.password = password;
     
    }
    

    Vergleich doch mal mit der Funktion, die dir gezeigt wurde. Alles was wichtig war, hast du entfernt, bis das Ergebnis überhaupt keinen Sinn mehr machte.



  • Ich weiß ich habe sehr vieles rausgenommen.
    Z.B. das hier data user; ich dachte das müsste ich in der main machen weil ich möchte die ganzen User auch noch ausgeben und wenn ich data user; in der Funktion schreibe ist dies nicht gültig in der main.
    Dann return result;

    Und warum ist der Rückgabetyp der Funktion data? Damit das in das, die oder der struct geschrieben wird?

    Das ist nur ein Beispiel, das ist nicht wirklich so wenn du einen Konstruktor schreibst.

    Deswegen frage ich ja... Ich komme damit so gar nicht klar momentan 😕



  • Wenn du bisher noch gar keine Memberfunktionen verwendest (bzw. verstanden hast), dann nimm ersteinmal diese Version:

    struct data
    {
        string username;
        string password;
    };
    
    void make_data(data& user, std::string const& username, std::string const& password)
    {
        user.username = username;
        user.password = password;
    }
    
    int main()
    {
        std::vector<data> users;
    
        string username="foo";
        string password="bar";
    
        data user;
        make_data(user, username, password);
    
        users.push_back(user);
    
        std::cout << users.front().username << "-------" << users.front().password << '\n';
    
        return 0;
    }
    

    Ich hoffe, ich habe jetzt keinen Syntax-Error hier eingebaut.
    Und versuche jetzt, diesen Code zu verstehen...



  • Oha ja! Das ist mir um einiges Verständlicher.
    Aber mein Versuch ähnelt dem ja schon ein wenig... 😃

    Nur wenn ich jedzt z.B. das in einer Schleife packe sodass ich 5 User angelegt habe, wie spreche ich die nun einzelnd an?
    Das wäre dann auch schon meine letzte Frage 🙂



  • Du kannst über den vector iterieren:

    for(std::vector<data>::const_iterator it = users.begin(); it != users.end(); ++it)
      cout << it->username;
    

    In C++11 geht das auch kürzer mit

    for(const auto & user : users)
      cout << user.username;
    

    s.a. Ten C++11 Features Every C++ Developer Should Use



  • Danke für die Antwort. Und ich hätte mir vorher nochmal angucken sollen wie son Vektor überhaupt "funktioniert".
    Aufjedenfall möchte ich jedzt die eingaben die in dem Vektor gespeichert sind in eine .txt schreiben, innerhalb einer Funktion. Das Problem dabei ist das der Vektor halt nur in der main bekannt ist.

    struct data{
        string username;
        string password;
    };
    
    void write(data user, ??){ //Hier
        fstream p_shadow;
        p_shadow.open("shadow.txt", ios::out|ios::trunc);
        if(!p_shadow){
            cout << "Datei konnt nicht geöffnet werden!";
        }
        else{
            for(unsigned int i=0;i<users.size();i++){
                cout << users[i].username << '\n';
                cout << users[i].password << '\n';
            }
            p_shadow.close();
        }
    }
    
    int main(){
        vector<data> users;
    
        write(user, ??) //Hier
    }
    

    Und ich weiß nicht wie ich den Vektor nun übergebe.



  • Du übergibst ihn genauso wie du alles andere auch an Funktionen übergibst...?


Anmelden zum Antworten