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_INCLUDEDhandy.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...