metoda za menjanje znaka

3

metoda za menjanje znaka

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Tu me je zbunilo zato sto prvo korisnik treba da ukuca sta mu se trazi pa onda da napravim objekat i dam mu ono sto je korisnik ukucao. I sada kada ja to uradim u do-while petlji posle mi izbacuje gresku da ne mogu da vratim unos objekat jer nije definisan tj. definisan je u do petlji ali posle ne mogu da ga koristim. Pa sam zato tako napisao.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Probaj nešto ovako. Pišem iz glave pa možda ima neka greška:
Test Unesi_Ime(std::string Pniz) {    do {       char ime[20];       char* p;       std::cout << std::endl << Pniz << std::endl;       gets(ime);       p = ime;       Test unos(p);       if(unos.empty())          std::cerr << "Niste uneli ime - pokusajte ponovo!" << std::endl;       else          return unos;    } while(true); }



offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Opet istu gresku izbacuje.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Koju grešku izbacuje?

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Evo slike.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Ta greška znači da hoćeš da obrišeš (delete) nešto što nisi kreirao (new). Ako pogledaš destruktor klase, videćeš da brišeš string bez proveravanja da li je 0. Napiši ga ovako:
~Test() { if (name) delete [] name; }

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Dodao sam to ali opet izbacuje gresku.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Jedino što vidim ovako bez detaljne analize je da iz funkcije Unesi_Ime vraćaš objekat sa steka. Pošto se funkcija završi, objekat sa steka nestaje i svaka njegova dalja upotreba dovodi do greške.

Predlažem ti da popraviš funkciju Unesi_Ime tako da ne vraća objekat Test, nego da proslediš kao ref parametar koji će biti postavljen u funkciji.

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Mislis ovako?
void Unesi_Ime(std::string Pniz, Test obj)

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14227
  • Gde živiš: Niš

To je prenos po vrednosti. Objekat koji proslediš će bukvalno biti prekopiran u novi objekat. Umesto objekta, prosledi samo referencu na taj objekat - dodaj samo operator za referenciranje - &.

Ko je trenutno na forumu
 

Ukupno su 468 korisnika na forumu :: 22 registrovanih, 3 sakrivenih i 443 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 1567 - dana 15 Jul 2016 19:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: _Sale, A.R.Chafee.Jr., Apok, bulovic, goxin, ibssa, Insan2, Kaplar2, krunc, pein, repac2, sakota79, shaja1, shmele2, Taso, Trpe Grozni, vathra, vladetije, voja64, zixo, zlatkoa987, zlaya011