Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dostęp do zmiennej private z innej klasy

Ostatnio zmodyfikowano 2011-09-30 20:40
Autor Wiadomość
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:
C/C++
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)
P-41557
DejaVu
» 2011-09-30 17:25:13
C/C++
class Klasa1
{
    friend class Klasa2; //to trzeba dopisać
};
P-41558
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.
P-41559
DejaVu
» 2011-09-30 17:53:32
C/C++
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 ==========
P-41560
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? :)
P-41562
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ś.
P-41563
Mrovqa
» 2011-09-30 18:39:01
Dodam, że przyjaźń nie jest dziedziczona :) (przyjaciel mojej matki to nie koniecznie mój przyjaciel)
P-41564
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 :))
C/C++
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; //tutaj błąd -.-
    }
}
? :)

PS. Nie patrzcie na to jak to wygląda, to tylko prototyp ;p
P-41565
« 1 » 2
  Strona 1 z 2 Następna strona