Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 3.513 pregleda

Najnovija ↓

Friend funkcija neke klase, problem. 30.08.2006. u 10:01 · pre 245 meseci
izmenjeno 1 put, poslednji put toxi_programer 30.08.2006. u 11:29
  1. toxi_programer30.08.2006. u 11:29zapis iz teksta poruke
#1
Imam problem sa deklaracijom frienda klase. U knjizi pise da friend ima pravo pristupa private clanovima klase, a ovo opet nece da radi. Evo o cemu se workuje:
Code:

class str {
public:
friend istream& operator>>(istream &in, str &s);
/* ....... */
};

/* ......*/
istream& operator>>(istream &in, str &s) //ova f-ja treba da bude friend
{
//isprazni s
s.data.clear();

//odvoj razmake sa leva
char zn;
while(in.get(zn) && isspace(zn));

//citaj sve dok ne dodjes na razmak i upisi u S
do s.data.push_back(zn);
while(in.get(zn) && isspace(zn));
in.unget();

return in;
}

Kaze kompajler da ne moze da se pristupi clanu data posto je isti deklarisan kao private podatak.
Pa kako da omogucim pristup?
Potpis
Expert Opinions - Niche Articles
Re: Friend funkcija neke klase, problem. 30.08.2006. u 10:48 · pre 245 meseci #2
Pa jesi ti uopće dodao taj friend u klasi??

friend istream& operator>>(istream &in, str &s);

Ako to ne pali probaj odmah napisati to tijelo u samoj klasi.
Re: Friend funkcija neke klase, problem. 30.08.2006. u 11:29 · pre 245 meseci #3
Pa jesam deklarisao kao friend:
Code:

class str {
public:
friend istream& operator>>(istream &in, str &s); //evo
/* ....... */
};

i zatim sam definisao f-ju operator>>(bla bla).
Medjutim moram da tu f-ju napisem van tela klase, dakle da f-ja ne bude funkcija clanica klase ali da ima pristup private podacima.
Potpis
Expert Opinions - Niche Articles
Re: Friend funkcija neke klase, problem. 30.08.2006. u 14:42 · pre 245 meseci #4
Ta friend funkcija i nije članica klase bez obzira napisao ti njeno tijelo unutar klase ili ne. Kad bi bila članica onda ti friend ne bi ni trebao jer samim time što je ta funkcija članica te klase ona odmah ima pristup i svim njenim članovima. Kvalifikator friend se općenito koristi da ti u klasi navedeš kojim vanjskim (uglavnom globalnim) funkcijama klasa dopušta pristup svim svojim članovima.
Re: Friend funkcija neke klase, problem. 30.08.2006. u 17:04 · pre 245 meseci #5
Pa da znam to. Nego ovako:
Sve radi lepo ako je operator>>(bla) definisan unutar klase( uz kljucnu rec friend u ovom slucaju fja nece biti clanica klase), medjutim ako se definisanje fje izvrsi van tela klase kompajler javlja da je ta fja neodredjena. Ako promenim ime fje, dakle da bude obicna fja a ne fja operatora onda u oba slucaja sve radio ok... ???
Potpis
Expert Opinions - Niche Articles
Re: Friend funkcija neke klase, problem. 31.08.2006. u 01:15 · pre 245 meseci #6
Ako operatorska f-ja nije clanica klase onda mora za jedan parametar imati objekat,
mozda da probas da promenis mesta parametrima (referenca str &s da prva bude)
mozda tako mora. Ovako deluje logicno kako si napisao.
Potpis
Mislim, šta reći !
Re: Friend funkcija neke klase, problem. 31.08.2006. u 11:59 · pre 245 meseci #7
Sve je u redu.
Koji kompajler koristis, i koju verziju?

GCC 3.4.2 ne prijavljuje nikakvu gresku.

Probaj da pre class str stavis istream& operator>>(istream &in, str &s);

Znaci ovako nesto:

Code:

 istream& operator>>(istream &in, str &s);  //!< forward deklaracija
 class str
 {

  //...
 };


Malko nepotrebno, ali ne skodi.


Ako to ne pomogne, menjaj (verziju) kompajler(a).


Nezaboravi #include <fstream> i #include <string>, pa using namespace std;

Ako si sve to vec stavio onda ti definitivno kompajler ne valja, lose namesten ili mator ...
Potpis
AKA DDMM
Re: Friend funkcija neke klase, problem. 01.09.2006. u 11:43 · pre 245 meseci #8
@1jedini
sve sam potrebne fajlove ukljucio, using namespace std i ostalo je sve ok.
Ovaj primer sa prototipom nisam pokusao da kompajliram ali ce biti greska sigurno jer bi koristio tip STR pre nego sto ga definisem a to ne moze.
@android~paranoid
Koristim VS 6.0. Prvi parametar se odnosi na vrednost levo od operatora, drugi na desnu vrednost. Ja sam hteo da omogucim npr:
str ime;
cin >> ime;
Ako bi im promenio mesta pisalo bi se:
ime >> cin // ili tako nesto....
-----------------------------------------------------------------------------------------------------------
Da, sada mislim da je kompajler u pitanju. Otvorim ja workspace malo pre stavim da se kompajlira program i ne prijavi ni jedan error ni jedan warning, a trebalo bi da bude jedan warning jer main nije vracala vrednost. Iskompajliram ponovo, nista nisam menjao i "cvrc" opet stara prica... Reinstal bi trebalo da pomogne?
Potpis
Expert Opinions - Niche Articles
Re: Friend funkcija neke klase, problem. 01.09.2006. u 20:19 · pre 245 meseci #9
Citat:

Da, sada mislim da je kompajler u pitanju. Otvorim ja workspace malo pre stavim da se kompajlira program i ne prijavi ni jedan error ni jedan warning, a trebalo bi da bude jedan warning jer main nije vracala vrednost. Iskompajliram ponovo, nista nisam menjao i "cvrc" opet stara prica... Reinstal bi trebalo da pomogne?


Isto imam VS 6.0, i kod mene ne prijavi ta upozorenja, ali mislim da je to tako i predvidjeno da
prijavi recimo prvi put kad kompajliras a svaki sledeci da ih zanemari.


Potpis
Mislim, šta reći !
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme