Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Greska u funkciji clanici klase

[es] :: C/C++ programiranje :: Greska u funkciji clanici klase

[ Pregleda: 3027 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Greska u funkciji clanici klase14.02.2002. u 12:29 - pre 251 meseci
Na oznacenim mestima, u implementaciji funkcije clanice PartsList::Iterate(), kao i u deklaraciji funkcije PartsCatalog::ShowAll(), konstantno se prikazuje greska u prevodjenju. Funkcija uzima pokazivac na funkciju clanicu klase Part, koja je const i vraca void:
Code:

class PartsList
{
   public: 
      PartsList();
      ~PartsList();
      // potreban je konstruktor kopije i operator jednako
      void Iterate(void (Part::*f)()const) const;
      Part * Find(ULONG & positon, ULONG PartNumber) const;
      Part * GetFirst() const;
      void Insert(Part *);
      Part * operator[](ULONG) const;
      ULONG GetCount() const { return itsCount; }
      static PartsList & GetGlobalPartsList()
      {
         return GlobalPartsList;
      }
   private:
      PartNode * pHead;
      ULONG itsCount;
      static PartsList GlobalPartsList;
};

// ...

void PartsList::Iterate(void (Part::*f)()const) const
{
   if (!pHead)
      return;
   
   PartNode * pNode = pHead;
   
   do
      (pNode -> itsPart -> *f)(); // ovde javlja gresku !
   while (pNode = pNode -> itsNext);
}

// ...

class PartsCatalog : private PartsList
{
   public:
      void Insert(Part *);
      ULONG Exists(ULONG PartNumber);
      Part * Get(int PartNumber);
      // operator+(const PartsCatalog &);
      void ShowAll() { Iterate(Part::Display); } // i ovde javlja gresku
   private:
      PartsList thePartsList;
};

Gde je greska?
Recite mi, ako bude trebalo da postujem i dodatne implementacije.

Pozdrav.
 
Odgovor na temu

alex
Aleksandar Radulovic
Senior Software Engineer, Spotify
Stockholm, Sweden

Član broj: 71
Poruke: 2194
194.144.223.*

Jabber: alex@a13x.info
ICQ: -1
Sajt: www.a13x.info


+1 Profil

icon Re: Greska u funkciji clanici klase14.02.2002. u 13:33 - pre 251 meseci
Citat:
passanger:
Funkcija uzima pokazivac na funkciju clanicu klase Part, koja je const i vraca void:
Code:

void PartsList::Iterate(void (Part::*f)()const) const



Ne bih bas rekao da funkcija uzima pokazivac vec uzima ono sto vraca
ta funkcija, odnosno void. Nisam bas siguran, ali mislim da je tako.

Citat:

Gde je greska?
Recite mi, ako bude trebalo da postujem i dodatne implementacije.
Pozdrav.


Postuj kakvu gresku ti prijavljuje kompajler da bi se malo vise upoznali sa problemom.

Poz, alex.

Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Greska u funkciji clanici klase14.02.2002. u 16:58 - pre 251 meseci
Na prvi pogled, treba da zameniš

{ Iterate(Part::Display); }

sa

{ Iterate(&Part::Display); }

a za prvu grešku ne vidim uzrok.

Možeš li da postuješ tekst grešaka koje prijavljuje kompajler, kao i deklaraciju klase Part?

 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: Greska u funkciji clanici klase14.02.2002. u 17:05 - pre 251 meseci
Heh Alex, evo bas sam poceo da ti pisem odgovor, kada sam resio problem.
Naime, ono jeste bio pokazivac na funkciju a ne ono sto vraca pokazivac na funkciju odnosno funkcija, da bi se izbeglo pravljenje pokazivaca na funkciju Part::Display() (koja je druga klasa) u samom programu. Inace pokazivac je tu da se ne bi funkcija clanica Part::Display() pozivala posebno za svaki objekat.

Inace, evo kao je problem resen, ali bi mi mozda sada trebalo malo objasnjenje.
Prva linija gde je greska prijavljivana je:
Code:
(pNode -> itsPart -> *f)();
kompajler je prijavljivao gresku kao parse error before '*' i greska je resena kada je izbacen razmak (blanko) izmedju -> *f
Code:
(pNode -> itsPart [red]->*f[/red])();
Poruka mi je bila jasna ali ne znam koje veze ima to sto je tu bio razmak !? Jer je ista greska bila prijavljivana, i kada su bile ukljucene zagrade zbog prioriteta operatora ?

Drugu gresku sam ja prevideo :) Posto funkcija PartsList::Iterate() ocekuje pointer na funkciju, ja sam prevideo da prosledim adresu funkcije
Code:
 void ShowAll() {Iterate(Part::Display);}
umesto
Code:
 void ShowAll() {Iterate(&(Part::Display));}
.

Samo mi je jos uvek nejasno ovo prvo gore. Koje veze ima razmak ?
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Greska u funkciji clanici klase14.02.2002. u 17:24 - pre 251 meseci
Hrkljuš!!!!

Nisam primetio razmak.

->* je poseban operator, a ne -> za kojim sledi *. Kada ga napišeš odvojeno, to je kao da umesto == staviš = =
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: Greska u funkciji clanici klase14.02.2002. u 17:42 - pre 251 meseci
Hrkljush i ja :))
U pravu si. Kako sam samo to mogao da previdim !! Jer je to poseban operator izbor clana za pointer, a kako je ovo funkcija clanica, onda ... HUH !
Thanx cale :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: Greska u funkciji clanici klase

[ Pregleda: 3027 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.