Forum » Programiranje » c++ seznam objektov, vektorji
c++ seznam objektov, vektorji
PunXXX ::
Pozdravljeni!
Imam sledeč problem.
Narediti moram program kateri iz prebranih podatkov (iz datoteke) tvori objekte razreda DruzinskaOseba in Druzina, nato moram napolniti vektor družin s pravkrar ustvarjenimi objekti.
Podatke iz datoteke pravilno prebere.
Problem je, da na koncu, ko kličem metodo za izpis (kateri izpišem vsebino vektorja) se mi vedno izpiše le priimek, družine članov pa ne izpiše nikoli.
Predvidevam, da je problem v main-u (na tistem delu, kjer kličem metodo dodajClana) (če se motim me prosim popravite)
Vem da morem še nekako alocirat pomnilniški prostor za vsak objekt ustvarjenega seznama, spodaj je objavljen moj propadli poskus delanja le tega :).
Druzina *Druzine = new Druzina[20];
Druzina *dr;
for
{
dr= new Druzina;
Druzine[i]= dr;
}
Naloga: (kode nisem mogel prilepiti ker me je konstantno opozarjalo na nek nedovoljen znak :S)
http://rapidshare.com/files/239012780/v...
Lepo prosim za pomoč.
Imam sledeč problem.
Narediti moram program kateri iz prebranih podatkov (iz datoteke) tvori objekte razreda DruzinskaOseba in Druzina, nato moram napolniti vektor družin s pravkrar ustvarjenimi objekti.
Podatke iz datoteke pravilno prebere.
Problem je, da na koncu, ko kličem metodo za izpis (kateri izpišem vsebino vektorja) se mi vedno izpiše le priimek, družine članov pa ne izpiše nikoli.
Predvidevam, da je problem v main-u (na tistem delu, kjer kličem metodo dodajClana) (če se motim me prosim popravite)
Vem da morem še nekako alocirat pomnilniški prostor za vsak objekt ustvarjenega seznama, spodaj je objavljen moj propadli poskus delanja le tega :).
Druzina *Druzine = new Druzina[20];
Druzina *dr;
for
{
dr= new Druzina;
Druzine[i]= dr;
}
Naloga: (kode nisem mogel prilepiti ker me je konstantno opozarjalo na nek nedovoljen znak :S)
http://rapidshare.com/files/239012780/v...
Lepo prosim za pomoč.
Tutankhamun ::
for(izpis=seznam.begin(); izpis<seznam.end(); izpis++) { string rezultat=(*izpis).getFunkcija(); if(rezultat=="oce") { cout<<"oce: "; (*izpis).izpis(); oce=true; } if(rezultat=="mati") { cout<<"mati: "; (*izpis).izpis();
Tuki vedno dobiš v rezultat, funkcijo člana na koncu je pa presledek?
Primer: "oce "
Ti pa pol to primerjaš s samo "oce", kar pa valda nikol ni pravilno. Več pa pol nisem gledal, ker je nekam pozn.
Če pa še ne bo šlo, pa povej, pa še enkrat mal pogledam :P.
AMD Phenom QUAD 9950 Black Edition, 8GB
PunXXX ::
Sem preveril.
Še vedno ne deluje.
Konkretno izpis metoda mi pravilno deluje problem je pomoje pri seznamu (tabeli) objektov v main delu:
Druzina *Druzine = new Druzina[20];....
Še vedno ne deluje.
Konkretno izpis metoda mi pravilno deluje problem je pomoje pri seznamu (tabeli) objektov v main delu:
Druzina *Druzine = new Druzina[20];....
Tutankhamun ::
To zakaj si tuki ročno alocirov memorijo mi tut ni jasn.
Js bi naredu samo
Druzina Druzine[20];
Pa se znebiš 5 vrstic kode, pri tebi.
Po zajtrku bom pa še enkrat pogledu.
Dej tist izpis ustav v svojo kodo, pa povej kaj dobiš v konzoli...
Js bi naredu samo
Druzina Druzine[20];
Pa se znebiš 5 vrstic kode, pri tebi.
Po zajtrku bom pa še enkrat pogledu.
for(izpis=seznam.begin(); izpis<seznam.end(); izpis++) { string rezultat=(*izpis).getFunkcija(); cout << rezultat << "xxx" << endl; // dodaj to v svojo kodo if(rezultat=="oce")
Dej tist izpis ustav v svojo kodo, pa povej kaj dobiš v konzoli...
AMD Phenom QUAD 9950 Black Edition, 8GB
Zgodovina sprememb…
- spremenil: Tutankhamun ()
PunXXX ::
levo okence je izpis programa takrat, ko berem podatke iz datoteke (main del beri.txt itd.;
desno pa ob naključnem klicu neke družine;
Druzina d2("Music");
d2.dodajClana(DruzinskiClan("Tomaz", 1970, "oce"));
d2.dodajClana(DruzinskiClan("Lidija", 1971, "mati"));
d2.dodajClana("Jurij", 2007, "sin");
d2.dodajClana("Zarja", 2001, "hci");
Druzine[1]=d2; //tukaj izpis deluje pravilno
Druzine[1].izpis();
Tutankhamun ::
Sploh nevem več kaj je težava. Sm mislu, da ti ne izpiše članov, vidm pa v screenshotu, ko si ga ti dal, da ti jih izpiše. Kaj ti ne dela?
A imam js enako kodo kot ti? Ker pri meni so na koncu presledki...
A imam js enako kodo kot ti? Ker pri meni so na koncu presledki...
AMD Phenom QUAD 9950 Black Edition, 8GB
Tutankhamun ::
ofstream out("clan.txt", ios::out | ios::binary);
Če že daš ofstream, ti ni treba pisat ios::out. Ker pa zapisuješ text, ti pa tudi ni treba pisat ios::binary.
Napišeš samo
ofstream out("clan.txt");
Enako pa velja za ifstream!
Ampak men še zmer ne dela tko kot tebi :P.
A imaš Visual Studio, al maš kej druzga, Borland ...?
Če že daš ofstream, ti ni treba pisat ios::out. Ker pa zapisuješ text, ti pa tudi ni treba pisat ios::binary.
Napišeš samo
ofstream out("clan.txt");
Enako pa velja za ifstream!
Ampak men še zmer ne dela tko kot tebi :P.
A imaš Visual Studio, al maš kej druzga, Borland ...?
AMD Phenom QUAD 9950 Black Edition, 8GB
Tutankhamun ::
Lej
Tole imaš v eni funkciji in tale string ti potem shraniš v datoteko. Kot vidiš je na koncu presledek. Ti ga sam tja postaviš. Kako je zdej možn če to shraniš, da tvoj progi tega ne prebere in ti izpiše ocexxx namesto oce xxx, tako kot pri meni?
Neki tuki ne štima. Sm 100%, da nimam enake kode kot ti.
Js bom zdej ta presledek vn vrgu!
Ti pa povej kaj ti ne dela, kot bi ti hotu.
string toString() { stringstream ss; ss<<getIme()<<" "<<getRojstvo()<<" "<<getFunkcija()<<" "; return ss.str(); };
Tole imaš v eni funkciji in tale string ti potem shraniš v datoteko. Kot vidiš je na koncu presledek. Ti ga sam tja postaviš. Kako je zdej možn če to shraniš, da tvoj progi tega ne prebere in ti izpiše ocexxx namesto oce xxx, tako kot pri meni?
Neki tuki ne štima. Sm 100%, da nimam enake kode kot ti.
Js bom zdej ta presledek vn vrgu!
Ti pa povej kaj ti ne dela, kot bi ti hotu.
AMD Phenom QUAD 9950 Black Edition, 8GB
PunXXX ::
Člane mi je izpisalo takrat ko sem jih ročno dodal (primer kode je v mojem predzadnjem postu)
Samo xxx pa izpiše tam kjer berem iz datoteke:
Del kateri ne deluje(izseki iz kode):
Druzina temp;
temp.setPriimek(s); //to še deluje (izpiše samo priimke družin)
temp.dodajClana(osebaPodatki[0], atoi(osebaPodatki[1].c_str()), osebaPodatki[2]); //tukaj članov ne izpisuje oz jih ne doda v vektor
Druzine[skupajDruzin]=temp;
v mainu pač izpišem s for zanko iz seznama objektov (koliko družin pač je) (Druzine[i].izpis(); )
Samo xxx pa izpiše tam kjer berem iz datoteke:
Del kateri ne deluje(izseki iz kode):
Druzina temp;
temp.setPriimek(s); //to še deluje (izpiše samo priimke družin)
temp.dodajClana(osebaPodatki[0], atoi(osebaPodatki[1].c_str()), osebaPodatki[2]); //tukaj članov ne izpisuje oz jih ne doda v vektor
Druzine[skupajDruzin]=temp;
v mainu pač izpišem s for zanko iz seznama objektov (koliko družin pač je) (Druzine[i].izpis(); )
Tutankhamun ::
Popravil sem še eno čudno funckijo split!
Popravljena
Zdej bom pa pregledu še to za kar sprašuješ.
Popravljena
void stringSplit(string str, string podatki[]) { int indeks=0; int velikost=str.length(); size_t found, found2; found = str.find(" "); podatki[indeks++]=str.substr(0, found); found2 = found; found = str.find(" ", found2+1); podatki[indeks++]=str.substr(found2+1, found - found2 - 1); found2 = found; found = str.find(" ", found2+1); podatki[indeks++]=str.substr(found2+1, found - found2 - 1); }
Zdej bom pa pregledu še to za kar sprašuješ.
AMD Phenom QUAD 9950 Black Edition, 8GB
Tutankhamun ::
A problem naj bi bil tukaj? Mal sm odkomentirov, a je to prov, al morem pustit zakomentiran?
if(zacni==true) //zacnemo vpisovat { Druzina temp; for(int i=0; i<kolikoKrat+1; i++) { getline(beri, s); if(i==0) //vpisemo Priimek druzine { Druzine[skupajDruzin].setPriimek(s); cout<<"priimek: "<<s<<endl; Druzina temp(s); Druzine[skupajDruzin]=Druzina(s); temp.setPriimek(s); } else //dodamo družinskega èlana { stringSplit(s, osebaPodatki); //loèimo prebrano vrstico na 3 dele (ime, leto rojstva in funkcijo) cout<<"Ime: "<<osebaPodatki[0]<<endl; Druzine[skupajDruzin].dodajClana(osebaPodatki[0], atoi(osebaPodatki[1].c_str()), osebaPodatki[2]); //drugi argument pretvorimo v int temp.dodajClana(osebaPodatki[0], atoi(osebaPodatki[1].c_str()), osebaPodatki[2]); } } Druzine[skupajDruzin]=temp; temp.izpis(); skupajDruzin++; //povecamo skupno stevilo družin zacni=false; }
AMD Phenom QUAD 9950 Black Edition, 8GB
PunXXX ::
Tisto zakomentirano čudo so bili pač moji poskusi, da bi naredil delujočo kodo.
če zakomentiraš (vse)
temp.dodajClana(osebaPodatki[0], atoi(osebaPodatki[1].c_str()), osebaPodatki[2]);
in
odkomentiraš
Druzine[skupajDruzin].dodajClana(osebaPodatki[0], atoi(osebaPodatki[1].c_str()), osebaPodatki[2]);
bo delovalo isto.
Edini stvari kateri sta odvečni (preverjal sem če dobi metoda pravile vhodne podatke v argumente)
kjer izpišemosebaPodatki[0]
ter
temp.izpis();
če zakomentiraš (vse)
temp.dodajClana(osebaPodatki[0], atoi(osebaPodatki[1].c_str()), osebaPodatki[2]);
in
odkomentiraš
Druzine[skupajDruzin].dodajClana(osebaPodatki[0], atoi(osebaPodatki[1].c_str()), osebaPodatki[2]);
bo delovalo isto.
Edini stvari kateri sta odvečni (preverjal sem če dobi metoda pravile vhodne podatke v argumente)
kjer izpišemosebaPodatki[0]
ter
temp.izpis();
Tutankhamun ::
Zdej sm odstranu, use kar si imel zakomentiran, pa prvi del, kjer vpisuješ v datoteko
Pa dobim rezultat
Men se zdi use ok, kaj pa teb?
int main(int argc, char *argv[]) { //branje družinskih èlanov iz datoteke ifstream beri; string s; string osebaPodatki[3]; bool zacni=false; int kolikoKrat=0; Druzina Druzine[20]; int skupajDruzin=0; //koliko družin že imamo v seznamu beri.open("clan.txt"); if(beri) { while(getline(beri, s)) { if(getStevilo(s)!=0 && zacni==false) //èe je v stringu podano samo število { zacni=true; kolikoKrat=getStevilo(s); //dobimo kolikšno je število èlanov družine } if(zacni==true) //zacnemo vpisovat { //Druzina temp; for(int i=0; i<kolikoKrat+1; i++) { getline(beri, s); if(i==0) //vpisemo Priimek druzine { Druzine[skupajDruzin].setPriimek(s); } else //dodamo družinskega èlana { stringSplit(s, osebaPodatki); //loèimo prebrano vrstico na 3 dele (ime, leto rojstva in funkcijo) Druzine[skupajDruzin].dodajClana(osebaPodatki[0], atoi(osebaPodatki[1].c_str()), osebaPodatki[2]); //drugi argument pretvorimo v int } } skupajDruzin++; //povecamo skupno stevilo družin zacni=false; } } } else { cout<<"napaka"<<endl; } beri.close(); beri.clear(); for(int i=0; i<skupajDruzin; i++) { Druzine[i].izpis(); } system("PAUSE"); return EXIT_SUCCESS; }
Pa dobim rezultat
Men se zdi use ok, kaj pa teb?
AMD Phenom QUAD 9950 Black Edition, 8GB
PunXXX ::
Sedaj sem prekopiral tvojo kodo v moj main in še vedno ne dela.
Sedaj sem celoten projekt spravil v visual studio okolje in še vedno ne deluje. (Izpiše samo priimek družine brez njenih članov)
V katerem okolju ti poganjaš ta program.
Ali bi ga lahko kam naložil da ga še jaz poženem? Kajti res ne vem kaj je sedaj vse to tebi dela, meni ne.
Tukaj sem naložil prekopirano nalogo (visual studio)
http://rapidshare.com/files/239207393/v...
Povej mi prosim, če ti deluje pravilno (meni ne).
lp
Sedaj sem celoten projekt spravil v visual studio okolje in še vedno ne deluje. (Izpiše samo priimek družine brez njenih članov)
V katerem okolju ti poganjaš ta program.
Ali bi ga lahko kam naložil da ga še jaz poženem? Kajti res ne vem kaj je sedaj vse to tebi dela, meni ne.
Tukaj sem naložil prekopirano nalogo (visual studio)
http://rapidshare.com/files/239207393/v...
Povej mi prosim, če ti deluje pravilno (meni ne).
lp
Tutankhamun ::
Seveda ti ne dela. Reku si, da si zradiral tist presledek na koncu, zdej ti pa stringsplit metoda ne dela več pravilno.
Nek bolj zgoraj, sem ti popravil stringsplit funkcijo. Prepiš jo, pa bo delal ;).
Nek bolj zgoraj, sem ti popravil stringsplit funkcijo. Prepiš jo, pa bo delal ;).
AMD Phenom QUAD 9950 Black Edition, 8GB
PunXXX ::
Joj budalo jz, tisti post sem pa čisto spregledal glede split string funkcije:)
Najlepša hvala za ves tvoj trud :)
Zahvaljujem se ti iz dna srca.
Lep dan še naprej.
Najlepša hvala za ves tvoj trud :)
Zahvaljujem se ti iz dna srca.
Lep dan še naprej.
Tutankhamun ::
Nekak tko bi pa js naredu. :)
Samo vseh pointerčkov sm se znebu :).
class FamilyMember { public: friend ostream &operator<<(ostream &stream, FamilyMember ob); friend istream &operator>>(istream &stream, FamilyMember &ob); protected: string m_name; string m_birth; string m_status; }; ostream &operator<<(ostream &os, FamilyMember fm) { os << fm.m_name << " " << fm.m_birth << " " << fm.m_status; return os; } istream &operator>>(istream &is, FamilyMember &fm) { is >> fm.m_name >> fm.m_birth >> fm.m_status; return is; } class Family { public: friend ostream &operator<<(ostream &stream, Family fy); friend istream &operator>>(istream &stream, Family &fy); void Clear () { m_members.clear (); } protected: typedef vector <FamilyMember> vMembers; string m_lastName; vMembers m_members; }; ostream &operator<<(ostream &os, Family fy) { int membersCount = fy.m_members.size (); os << membersCount << endl; os << fy.m_lastName << endl; for (int i = 0; i < membersCount; i++) os << fy.m_members[i] << endl; return os; }; istream &operator>>(istream &is, Family &fy) { FamilyMember fm; int membersCount; is >> membersCount; is >> fy.m_lastName; for (int i = 0; i < membersCount; i++) { is >> fm; fy.m_members.push_back(fm); } // test for eof long loc = is.tellg (); is >> membersCount; if (!is.eof ()) is.seekg (loc, ios::beg); return is; } int main(int argc, char *argv[]) { typedef vector <Family> vFamilys; vFamilys familys; Family fy; ifstream ifs; ifs.open ("clan.txt"); ifs.clear (); while (!ifs.eof ()) { ifs >> fy; familys.push_back (fy); fy.Clear (); } ifs.close (); ofstream ofs; ofs.open ("clan1.txt"); vFamilys::iterator iEnd = familys.end(); for (vFamilys::iterator iCur = familys.begin (); iCur < iEnd; iCur++) ofs << *iCur; ofs.close (); return 0; }
Samo vseh pointerčkov sm se znebu :).
AMD Phenom QUAD 9950 Black Edition, 8GB
Zgodovina sprememb…
- spremenil: Tutankhamun ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c++ DODAJANJE elementov iz datoteke v vektorOddelek: Programiranje | 962 (837) | Tutankhamun |
» | [Java] Problem s Scanner-jemOddelek: Programiranje | 2482 (2276) | Zlatan |
» | [JAVA] branje iz datotekeOddelek: Programiranje | 2423 (2058) | Bela01 |
» | VC# čitanje iz datoteke in shranjevanje v poljeOddelek: Programiranje | 1184 (997) | iceurb |
» | Novi člani GeForce 7 serijeOddelek: Novice / Grafične kartice | 3020 (2586) | simnov |