Klasy zaprzyjaźnione problem..

0

Mam taki kod...

 #include <iostream>
#include <cmath>
using namespace std;
/** Definicje klas **/

/*Deklaracja zapowiadajace*/
class kwadrat;
class prostokat;
class okrag;
class trojkat_prostokatny;
class trojkat_rownoboczny;
class trojkat_dowolny;
/*Koniec deklaracji zapowiadajacych*/

class narzedzia
{
  //domyslnie private
  int bok,wysokosc,promien;

  friend class kwadrat;
  friend class prostokat;
  friend class okrag;
  friend class trojkat_prostokatny;
  friend class trojkat_rownoboczny;
  friend class trojkat_dowolny;
};

class kwadrat
{
  public:
  void pole(int a)
  {
      bok = a;
  }
  void obw(int a);

};

/** Koniec definicji klas **/

int main(int argc, char* argv[])
{

}

Ciągle mi wypluwa, że NIE MA zadeklarowanej zmiennej bok.. Przecież jest..ale w klasie "narzędzia" , która się z kwadrat przyjazni. Wiec ocb?

0

o_O? I co by to niby miało znaczyć? ZUPEŁNIE nie rozumiesz na czym polega obiektowość. Czytałeś coś na ten temat w ogóle?
friend pozwala ci na dostęp do prywatnych składowych OBIEKTU PEWNEJ KLASY. Ale żeby móc odwołać się do takiej składowej to musisz mieć jakis OBIEKT!
Gdyby to działało tak jak napisałeś to co by się stalo gdybym zrobił dwa obiekty kwadrat z różnymi parametrami. Jaką wartość miałby bok?
Poza tym co to za idiotyczne "narzędzia"? Przecież bok, wysokość czy promień to są ewidentnie składowe kwadratu/prostokąta, trójkąta i koła! Czemu nie dasz tych pól tam gdzie być powinny?

0

Owszem masz zadeklarowaną przyjaźń klas kwadrat i narzędzia, jednak oznacza to iż możesz korzystać wewnątrz klasy kwadrat z pól OBIEKTU klasy narzędzia. Najpierw musisz posiadać instancję tej klasy. np.:

 
Narzedzia narz;
narz.bok = a;

1 użytkowników online, w tym zalogowanych: 0, gości: 1