Rozwiązanie problemu dostępu do klas

0

Mam problem z rozwiązaniem problemu. Mam klasę FileManager, którego obiekt umieszczam w klasie MenuScreen. Jest w tej klasie też tablica vectorów klasy Button. Klasa Button ma w priv: tekst,pozycję, oraz obrazek. FileManager ma ładować obrazek i tekst z pliku do danego obiektu klasy Button.

Do metody klasy FileManager muszę przesłać te tablicę Buttonów, żeby wgrać tam dane, ale są one prywante. Nie wiem jak to skonstruować żeby w managerze załadować dane do buttonów.

1

Stwierdziles, ze lepiej opisac kod niz go pokazac?

0
 class MenuScreen : public GameScreen
{

private:
    ALLEGRO_FONT *font;
    InputManager input;

    vector<Button> button;

    FileManager fileManager;

public:
    MenuScreen(void);
    ~MenuScreen(void);

    virtual void LoadContent();
    virtual void UnloadContent();
    virtual void Update(ALLEGRO_EVENT ev);
    virtual void Draw(ALLEGRO_DISPLAY *display);
};

I klasa filemanagera:

 class FileManager
{
public:
    FileManager();
    ~FileManager();

    void LoadContent(const char *filename, vector<Button>button);
};

W klasie MenuScreen jest metoda LoadContent gdzie jest wywoływana metoda z FileManagera. W tej funkcji muszą być wypełnione prywatne dane Buttonów:

 class Button
{
private:
    string text;
    ALLEGRO_BITMAP* buttonImage;
    pair<float,float> position;

public:
    Button();
    ~Button();

    void Draw(ALLEGRO_DISPLAY *display);
};
0

No i jaki jest problem?

0

File Manager nie ma dostępu do prywatnych składowych Button, a musi je jakoś wypełnić.

2

Ok

class Button
{
public:
  void setSkladowa(int nowa_wartosc) { skladowa=nowa_wartosc; }

private:
  int skladowa;
};
0

Warto dodać że jeżeli to jedyna taka składowa to można zrobić też taki myk:

class Button
  {
   private:
   int skladowa;
   public:
   Button(int skladowa):skladowa(skladowa) {}
   operator int()const { return skladowa; }
  };
...
Button b(666);
int x=b;
b=777;
0

Nie jedyna, muszę tam przekazać string oraz "image".

0

Ale nie koniecznie musisz je wprost pobierać/podmieniać.

0

Co to znaczy wprost, chcę żeby wszystkie akcje tego typu odbyły się w file managerze. Więc tam otwieram plik, wczytuje co trzeba i przypisuję (a raczej staram się) do prywatnych danych Buttonów. Użyję tych setterów :)

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