vector übergabe an function



  • Hallo,

    ich habe in meiner main function einen vector definiert mit:

    std::vector<struct str> vec;
    

    den vector möchte ich nun an eine Function übergeben die diesen Vector mit Daten füllt.

    Nun meine Frage dazu. Wie definieren ich die Funktion das ich den Vector in der Unterfunktion füllen kann und danach in der Main damit weiterarbeiten kann?

    ich hatte soetwas gedacht als Funktionsdeklarierung:

    void getAuftrag(std::vector<str>* F)
    {}
    

    und in der main

    getAuftrag(&vec);
    

    ABER das geht nicht..irgendeine Deklarierung mache ich da nicht richtig.



  • dann probier doch einfach mit std::vector<int> rum bis du es hast?

    void fillMe(std::vector<int> & intVec) {
    intVec.reserve(intVec.size()+10000);
    for ( int i=0; i<10000; ++i) intVec.push_back(i);
    }
    

    und das struct kannst du in c++ zumeist weglassen!



  • void getAuftrag(std::vector<struct str> &F)
    {}

    ...

    getAuftrag(vec);



  • wenn ich es so mache bekomme ich beim compilieren eine Fehlermeldung:

    error C2664: 'getAuftrag' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'std::vector<_Ty> &'



  • Guten Morgen,

    #include <iostream>
    #include <vector>
    using namespace std;
    
    struct str
    {
    };
    
    void getAuftrag(vector<str>& vec)
    {
        //vec.push_back(/*...*/);
    } 
    
    int main()
    {
        vector<str> vec;
        getAuftrag(vec);
    
        return 0;
    }
    

    lg



  • wie gesagt..

    besagte Fehlermeldung... !



  • Betriebssystem? IDE? Compiler?



  • Windows 7
    Visual Studio



  • bei mir tuts ... und das ist ein schönes (wenn auch nicht minimales) Prog. Dir ist schon aufgefallen das er nicht

    std::vector**<struct str>** bla;

    sondern

    std::vector**<str>** bla;

    gemacht hat?

    Dann passt der TemplateTyp hier wieder

    void getAuftrag( std::vector**<str>** & b) { /* */ }

    und dann funzt

    getAuftrag( bla );

    auch.

    Offensichtlich ist als Template Parameter "struct str" was anderes als der Template Parameter "str" und der motzt weil er nicht weiss wie er einen Vektor von Fischen in einen Vector von FischStäbchen konvertieren soll ...



  • Also hier mal mit copy & paste aus meinem Prog

    struct str
    {
    };
    
    void getAuftrag(std::vector<str>& vec)
    {
    }
    
    std::vector<str> vec;
    getAuftrag(vec);
    

    hab ich was auf dem auge????



  • Generell kann man das auch so lösen:

    struct str
    { 
       typedef std::vector<str> TStrVector;
    };
    
    void getAuftrag(str::TStrVector& vec)
    [...]
    

    Vorteil:
    Du musst nicht immer das vector ausschreiben und hast garantiert überall den selben Typ von vector.
    Und zu deinen Augen:
    Schau in deinen ersten Post :).
    Da steht std::vector<struct str>.



  • benenn mal str nach IchWeissDasDasGeht um ... wenn das immer noch nicht tut guck mal ob du mit VS in der cpp Toolchain bist - das kann ja auch VB und C# und so?



  • padreigh schrieb:

    benenn mal str nach IchWeissDasDasGeht um ... wenn das immer noch nicht tut guck mal ob du mit VS in der cpp Toolchain bist - das kann ja auch VB und C# und so?

    Eh, da würde der Compiler schon über Dateinamen meckern...



  • @Scorcher Ich fische im Trüben - es SOLLTE gehen.

    Was manchmal auch tut, ist bei VS einfach ein neues Projekt aufsetzen, Klassen neu anlegen, Inhalte (copy&paste) rüberkopieren - zeitweise verheddert der sich in seinen eigenen Projektdateien ... ansonsten wechsel auf ein vernünftiges BS 😉



  • klar immer ein hammerargument..ein neues BS



  • Etwas google-Fu hat es mir ermöglicht deine Fehlermeldung zu reproduzieren:

    #include <vector>
    
    using namespace std;
    
    struct str{};
    
    void getAuftrag(vector<str>& v) {
    }
    
    int main() {
       vector<int> test; //anderer template parameter!
       getAuftrag(test);
    }
    

    Wenn du die komplette Fehlermeldung anschaust, sollte danach etwas stehen wie

    with
    [
    _Ty=int
    ]
    and
    [
    _Ty=str
    ]

    Du verwendest wohl 2 unterschiedliche typen für deinen vector, deswegen gehts nicht. Wo das genau ist musst du selbst rausfinden



  • selbst wenn ich nun das & weglasse kommt eine Fehlermeldung die besagt:
    cannot convert from std::vector<_ty> to std::vector<_ty>

    was ja nun irgendwie gar keinen sinn macht warum er das nicht konvertieren kann...



  • Poste doch mal bitte den code.
    Du kannst natürlich nicht einfach

    struct str
    {
    };
    
    void getAuftrag(std::vector<str>& vec)
    {
    }
    
    std::vector<str> vec;
    getAuftrag(vec);
    

    schreiben, wie von dir zuletzt gepostet. Die letzten beiden Zeilen gehören in die main.



  • selbst wenn ich nun das & weglasse kommt eine Fehlermeldung die besagt:
    cannot convert from std::vector<_ty> to std::vector<_ty>

    was ja nun irgendwie gar keinen sinn macht warum er das nicht konvertieren kann...

    Doch, lies dir zum Teufel doch mal die ganze Fehlermeldung durch!

    das _ty vom ersten vector ist nicht dasselbe wie das _ty vom 2.

    Poste doch einfach mal die ganze fehlermeldung, dann kann ichs dir auch genauer sagen.

    Du kannst nunmal in einen vector<int> (nur mal als beispiel) in einen vector<char> umwandeln. Genausowenig wie in eine vector<char>&



  • Du kannst nunmal keinen vector<int>...

    fixed


Anmelden zum Antworten