mathias79 Opublikowano 18 Sierpnia 2004 Zgłoś Opublikowano 18 Sierpnia 2004 Witam Czy ktoś wie może czy po umieszczeniu jakiejś klasy w vektorze, zostanie wywołany kontruktor ? A jeśli tak to jaki ? Zwykły czy kopiujący ? ... kod mogłby wyglądać tak : class chromosom {}; chromosom chr_1; vector <chromosom> v; v.push_back(chr_1); jakoś tak ... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 18 Sierpnia 2004 Zgłoś Opublikowano 18 Sierpnia 2004 A niby czemu mialby byc wywolywany? Konstruktor jest wywlywany przy tworzeniu obiektu (w 2 linijce). A na przyszlosc to mozesz sobie to latwo sprawdzic, umiesc w konstruktorze(rach) jakies cout'y i zobaczysz. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
mathias79 Opublikowano 18 Sierpnia 2004 Zgłoś Opublikowano 18 Sierpnia 2004 A niby czemu mialby byc wywolywany? Konstruktor jest wywlywany przy tworzeniu obiektu (w 2 linijce).to fakt ale czy konstruktor kopiujący nie jest przypadkiem wywoływany gdy obiekt jest przesyłany do funkcji ? A na przyszlosc to mozesz sobie to latwo sprawdzic, umiesc w konstruktorze(rach) jakies cout'y i zobaczysz.też fakt. zaraz to sobie sprawdze. ale siedziałem akurat w pracy gdy mnie naszło i nie miałem jak tego sprawdzić. aby dać upust męczącemu mnie pytaniu napisałem posta ... :D dobra .. zabieram się do klepania ... zaraz zobaczymy ... :wink: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Megabyte Opublikowano 18 Sierpnia 2004 Zgłoś Opublikowano 18 Sierpnia 2004 W przypadku gdy klasa chromosom posiada konstruktor kopiujący jest on wywołany w metodzie push_back w przeciwnym wypadku wykonywana jest inicjacja składowa po składowej. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
mathias79 Opublikowano 19 Sierpnia 2004 Zgłoś Opublikowano 19 Sierpnia 2004 sprawdziłem ... i to nie przejdzie. funkcja push_back() faktycznie stara się wywołać konstruktor kopiujący ale wywala błąd " 48 c:dev-c_~1includeg__~1stl_construct.h conversion from `const tChromosom' to `tChromosom &' discards qualifiers " a oto prosty kodzik do zobarazowania tego co chciałem zrobić (czy tam jest jakiś bład ? ) #include <iostream>#include <vector>using namespace std;class tChromosom { int iChain[29]; public: tChromosom(void) { cout << "1,2,3 proba konstruktora klasy tChromosom;-)" << endl; } tChromosom(tChromosom &); };tChromosom::tChromosom(tChromosom & wzor) { }class tPopulation { public: vector <tChromosom> vPop_vect; };int main(int argc, char *argv[]){tPopulation Population;tChromosom chr1;Population.vPop_vect.push_back(chr1);system("PAUSE"); return 0;}po zmianie w konstruktorze kopiującym na tChromosom::tChromosom([B]const[/B] tChromosom & wzor) { }jest już lepiej .... lecz pozostaje inny błąd " 19 c:!!__mp~2vector.cpp prototype for `tChromosom::tChromosom(const tChromosom &)' does not match any in class `tChromosom' " już się trochę zakręciłem ... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Megabyte Opublikowano 19 Sierpnia 2004 Zgłoś Opublikowano 19 Sierpnia 2004 Musisz uważnie czytać informacje o błędach, które wypisuje Ci kompilator. Zapomniałeś dodać const w definicji klasy. Kod powinien wyglądać tak: #include <iostream> #include <vector>using namespace std; class tChromosom { int iChain[29]; public: tChromosom(void) { cout << "1,2,3 proba konstruktora klasy tChromosom;-)" << endl; } tChromosom(const tChromosom &); }; tChromosom::tChromosom(const tChromosom & wzor) { } class tPopulation { public: vector <tChromosom> vPop_vect; }; int main(int argc, char *argv[]){tPopulation Population;tChromosom chr1;Population.vPop_vect.push_back(chr1);system("PAUSE"); return 0;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
mathias79 Opublikowano 19 Sierpnia 2004 Zgłoś Opublikowano 19 Sierpnia 2004 Zapomniałeś dodać const w definicji klasy. Kod powinien wyglądać tak:chyba w deklaracji konstruktora kopiującego. Musisz uważnie czytać informacje o błędach, które wypisuje Ci kompilator.zgadzam się. ale muszę się przyzwyczaić do komunikatów Dev-C++. jak na razie pracowałem na innych kompilatorach .. a siła przyzwyczajenia jest wręcz potworna :wink: dziękuję wszystkim za pomoc i mam jeszcze jedno pytanie. rozumiem że klasa tChromosom nie jest const a tylko argument przesyłany do konstruktora kopiującego jest const ... czyli jednym słowem funkcja push_back() gwarantuje że nie naruszy nam obiektu wrzuconego do teko kontenerka ? dobrze to rozumiem .. w sumie chyba sam sobie odpowiedziałem .... :D :wink: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...