SeaMonster131 Temat założony przez niniejszego użytkownika |
[C++] Dostęp do zmiennej private z innej klasy » 2011-09-30 17:17:28 Witam, mam o coś takiego: class Klasa1 { private: int zmienna; public: };
class Klasa2 { private: public: void Metoda( Klasa1 * ); };
void Klasa2::Metoda( Klasa1 * kl ) { kl->zmienna = 10; } Oczywiście jest błąd :) Jak można coś takiego osiągnąć? (I czy jest to możliwe? ;p) |
|
DejaVu |
» 2011-09-30 17:25:13 class Klasa1 { friend class Klasa2; }; |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-09-30 17:36:00 coś mi nie działa :) Znaczy sie...nadal jest ten sam błąd. |
|
DejaVu |
» 2011-09-30 17:53:32 class Klasa1 { private: friend class Klasa2; int zmienna; public: };
class Klasa2 { private: public: void Metoda( Klasa1 * ); };
void Klasa2::Metoda( Klasa1 * kl ) { kl->zmienna = 10; }
int main() { return 0; }
Log kompilacji:
1>------ Build started: Project: tst_anything, Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>Linking...
1>Embedding manifest...
1>Build log was saved at "file://D:\tst_anything\BuildLog.htm"
1>tst_anything - 0 error(s), 0 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
|
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-09-30 17:58:33 Hm...a no fakt, tak to działa ;p ALE jeśli mam klasę ogólną, w której trzymam Klasa1 i Klasa2 to już mi to nie działa :) No nic.. usunę tą klasę ogólną ;p Chyba że da sie to jakoś zrobić bez jej usuwania? :) |
|
DejaVu |
» 2011-09-30 18:18:34 Klasa, która chce uzyskać dostęp do wartości prywatnej innej klasy musi być oznaczona jako przyjaciel. Jeżeli klasa X chce mieć dostęp do pola prywatnego klasy Y to klasa Y musi wskazać którym klasom 'ufa' poprzez dodanie zaprzyjaźnienia tak jak zostało to zrobione powyżej. Skoro Ci nie działa to znaczy, że zaprzyjaźniłeś się nie z tą klasą z którą powinieneś. |
|
Mrovqa |
» 2011-09-30 18:39:01 Dodam, że przyjaźń nie jest dziedziczona :) (przyjaciel mojej matki to nie koniecznie mój przyjaciel) |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-09-30 19:42:18 No ja to rozumiem :) Ale czemu w takim razie to nie działa (nie bd sie bawił w jakieś Klasa1 blabla, tylko dam kod :)) namespace SeaGUI { class GUI { public: class Form { friend class Button; private: ALLEGRO_BITMAP * FormIMG; ALLEGRO_BITMAP * FormX; int w, h, x, y; bool close; public: void Create( int, int, int, int, int ); void Render( ALLEGRO_MOUSE_STATE * ); void SetPosition( int, int ); void SetScale( int, int ); }; class Button { private: ALLEGRO_BITMAP * ButtonIMG; ALLEGRO_BITMAP * ButtonHoverIMG; int w, h, x, y; public: void Create( int, int, int, int, int ); void Render( ALLEGRO_MOUSE_STATE *, Form * ); }; }; void GUI::Button::Render( ALLEGRO_MOUSE_STATE * mysz, Form * window ) { window->x = 10; } } ? :) PS. Nie patrzcie na to jak to wygląda, to tylko prototyp ;p |
|
« 1 » 2 |