Poslao: 27 Jan 2015 14:51
|
offline
- crusher
- Ugledni građanin
- 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.
|
|
Poslao: 27 Jan 2015 14:59
|
offline
- Srki_82
- Moderator foruma
- 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);
}
|
|
|
|
|
Poslao: 27 Jan 2015 15:19
|
offline
- Srki_82
- Moderator foruma
- 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?
|
|
|
|
|
Poslao: 27 Jan 2015 15:38
|
offline
- Srki_82
- Moderator foruma
- 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; }
|
|
|
|
|
Poslao: 27 Jan 2015 15:46
|
offline
- Srki_82
- Moderator foruma
- 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.
|
|
|
|
|
Poslao: 27 Jan 2015 16:35
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14809
- 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 - &.
|
|
|
|