Object in Vector geschoben und push_back will nicht so wie ich.



  • Ich hätte es gerne dass das hier funktioniert.

    device.push_back(i,s);
    device.push_back(22,"Lumia");
    

    Die Konstruktoren sind gegeben und ich such schon seit Stunden diesen blöden Fehler 🙄

    main.cpp

    #include <iostream>
    #include <vector>
    #include <string>
    #include "handy.h"
    using namespace std;
    
    int main()
    {
        vector <Handy> device;
    
        string s = "ss";
        size_t i = 3;
    
        // Nur so gelingt mir der Mist bis jetzt
        device.push_back(Handy(i,s));
    
        for(size_t i=0; i<device.size();i++){
            cout << device[i].get_name();
        }
    
        return 0;
    }
    

    handy.h

    #ifndef HANDY_H_INCLUDED
    #define HANDY_H_INCLUDED
    #include <string>
    
    using namespace std;
    
    class Handy{
    private:
        size_t preis;
        string name;
    public:
        Handy();
        Handy(size_t &p,string &n);
        Handy(size_t &p);
        Handy(string &n);
        ~Handy();
    
        size_t get_preis() const {return preis;};
        string get_name() const {return name;};
    
        void write_preis();
        void write_name();
    
        void setzte_preis(size_t &p);
        void setzte_name(string &n);
    
    };
    
    #endif // HANDY_H_INCLUDED
    

    handy.cpp

    #include "handy.h"
    #include <string>
    #include <iostream>
    using namespace std;
    
    Handy::Handy(){
        preis=0;
        name="i";
    }
    
    Handy::Handy(size_t &p,string &n){
        preis = p;
        name = n;
    }
    
    Handy::Handy(size_t &p){
        preis = p;
        name = "";
    }
    
    Handy::Handy(string &n){
        name = n;
        preis = 0;
    }
    
    Handy::~Handy(){
    }
    
    void Handy::write_preis(){
       // getline(cin,preis);
       cin >> preis;
    }
    
    void Handy::write_name(){
        getline(cin,name);
    }
    
    void Handy::setzte_preis(size_t &p){
        preis = p;
    }
    void Handy::setzte_name(string &n){
        name = n;
    }
    


  • Wenn du gesagt hättest, was der blöde Fehler ist ...





  • device.push_back(i,s);
    

    Entweder

    device.push_back(Handy(i,s));
    

    oder

    [cpp]device.emplace_back(i,s);
    


  • Der Fehler ist.

    Fehler: keine passende Funktion für Aufruf von

    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/main.cpp|15|Fehler: keine passende Funktion für Aufruf von »std::vector<Handy>::push_back(int, const char [2])«|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/main.cpp|15|Anmerkung: Kandidat ist:|
    /usr/include/c++/4.8.2/bits/stl_vector.h|901|Anmerkung: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Handy; _Alloc = std::allocator<Handy>; std::vector<_Tp, _Alloc>::value_type = Handy]|
    /usr/include/c++/4.8.2/bits/stl_vector.h|901|Anmerkung: Kandidat erwartet 1 Argument, 2 angegeben|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/main.cpp|12|Warnung: Variable »i« wird nicht verwendet [-Wunused-variable]|
    ||=== Build finished: 5 errors, 0 warnings (0 minutes, 0 seconds) ===|



  • Die Lösung hast du doch oben schon gepostet bekommen. Eben emplace_back (in C++11).

    Zweitens gibt es solche Seiten wie http://www.cplusplus.com/reference/([1] bzw. [2]) oder http://en.cppreference.com/w/ ([3] bzw. [4]), wo das auch alles erklärt ist. Als Programmierer ist bzw. sollte man dauernd auf solchen Seiten unterwegs sein!



  • emplace funktioniert auch nicht 🙂

    /usr/include/c++/4.8.2/bits/alloc_traits.h|254| erfordert durch »static typename std::enable_if<std::allocator_traits<_Alloc>::__construct_helper<_Tp, _Args>::value, void>::type std::allocator_traits<_Alloc>::_S_construct(_Alloc&, _Tp*, _Args&& ...) [with _Tp = Handy; _Args = {int, const char (&)[3]}; _Alloc = std::allocator<Handy>; typename std::enable_if<std::allocator_traits<_Alloc>::__construct_helper<_Tp, _Args>::value, void>::type = void]«|
    /usr/include/c++/4.8.2/bits/alloc_traits.h|393| erfordert durch »static decltype (_S_construct(__a, __p, (forward<_Args>)(std::allocator_traits::construct::__args)...)) std::allocator_traits<_Alloc>::construct(_Alloc&, _Tp*, _Args&& ...) [with _Tp = Handy; _Args = {int, const char (&)[3]}; _Alloc = std::allocator<Handy>; decltype (_S_construct(__a, __p, (forward<_Args>)(std::allocator_traits::construct::__args)...)) = <type error>]«|
    /usr/include/c++/4.8.2/bits/vector.tcc|97| erfordert durch »void std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int, const char (&)[3]}; _Tp = Handy; _Alloc = std::allocator<Handy>]«|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/main.cpp|14| von hier erfordert|
    /usr/include/c++/4.8.2/ext/new_allocator.h|120|Fehler: keine passende Funktion für Aufruf von »Handy::Handy(int, const char [3])«|
    /usr/include/c++/4.8.2/ext/new_allocator.h|120|Anmerkung: Kandidaten sind:|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|15|Anmerkung: Handy::Handy(std::string&)|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|15|Anmerkung: Kandidat erwartet 1 Argument, 2 angegeben|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|14|Anmerkung: Handy::Handy(size_t&)|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|14|Anmerkung: Kandidat erwartet 1 Argument, 2 angegeben|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|13|Anmerkung: Handy::Handy(size_t&, std::string&)|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|13|Anmerkung: keine bekannte Umwandlung für Argument 1 von »int« nach »size_t& {aka long unsigned int&}«|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|12|Anmerkung: Handy::Handy()|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|12|Anmerkung: Kandidat erwartet 0 Argumente, 2 angegeben|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|7|Anmerkung: Handy::Handy(const Handy&)|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|7|Anmerkung: Kandidat erwartet 1 Argument, 2 angegeben|
    ||=== Build finished: 16 errors, 0 warnings (0 minutes, 0 seconds) ===|

    usw. die fehler wollt ihr gar nicht alle sehen xD
    ich schau mir mal einfach die Links an.



  • Dein Handykonstruktor erwartet eine Referenz auf einen size_t, da kannst du kein Literal nehmen.



  • Ich tippe auf

    Plattfuss' Compiler schrieb:

    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|13|Anmerkung: Handy::Handy(size_t&, std::string&)|
    /home/cseipel/Code::Blocks Kram/GTK/test project/KlassenINVektoren/handy.h|13|Anmerkung: keine bekannte Umwandlung für Argument 1 von »int« nach »size_t& {aka long unsigned int&}«|

    Edit: zu spät...


Anmelden zum Antworten