vector übergabe an function



  • 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



  • jetzt hab ichs...hab wirklich was auf dem Auge 🙂

    die struct war eine andere....jetzt habe ich auch die fehlermeldung verstanden 🙂

    danke für eure Hinweise 🙂



  • Gern geschehen :>

    Ich ignorier ja auch gerne die Informationen nach der ersten Zeile bei solchen Template-Fehlermeldungen 😉


Anmelden zum Antworten