[ Mr. Rejn @ 14.08.2010. 19:33 ] @
Ovako imam klasu koja je izvedena iz druge klase (u fajlu nivo.cpp):
Code:

class MyMouseListener : public gcn::MouseListener
{
    void mousePressed(gcn::MouseEvent& mouseEvent)
    {
        std::cout << "Mouse pressed: " << mouseEvent.getX() << " " << mouseEvent.getY() << std::endl;
        // text->setText("neki text"); << --ovde ova klasa "ne vidi" klasu nivo i njene clanove (textbox)
    }
};
//zatim je napravljena instanca (isto u nivo.cpp)
MyMouseListener myMouseListener;

dodao sam ovaj listener objektu koji je deklarisan kao private clan klase nivo itd. nije toliko bitno.
Ove klase MyMouseListener i klasa nivo nisu niukakvoj vezi...

Sad treba da pristupim text objektu iz ove klase gore,a taj text objekat je isto private u klasi nivo...dakle
kako da iz ove klase MyMouseListener dobijem pristup klasi nivo u cijem se .cpp fajlu ona nalazi?
Jbg valjda sam ovo dobro objasnio
[ Mihajlo Cvetanović @ 14.08.2010. 20:02 ] @
Meni nije dovoljno jasno. Daj kod umesto opisa.

Jel hoćeš da pristupiš "sestrinskom" objektu? To ne može automatski, kao što ne možeš automatski da pristupiš ni "roditelju". Moraš svom listeneru nekako da dostaviš referencu na objekat kojem želiš da pristupiš.
[ Mr. Rejn @ 14.08.2010. 22:52 ] @
Da pa ocekivao sam da nece biti bas jasno evo skracenog koda za ovo...upravo tako,dostavljanje
te reference na objekat je problem.

Code:

#include <stdio.h>
#include "SDL/SDL.h"
#include "SDL/SDL_mixer.h"
#include "../core/gameengine.h"
#include "gamestate.h"
#include "intro.h"
#include "../core/tajmer.h"


cIntro cIntro::m_Intro;


class MyMouseListener : public gcn::MouseListener
{
    void mouseReleased(gcn::MouseEvent& mouseEvent)
    {
        std::cout << "Mouse released: " << mouseEvent.getX() << " " << mouseEvent.getY() << std::endl;
        // text->setText("Neki text");  << text je polje za text koje je private u klasi cIntro,njemu treba pristupiti
       //  iz ovog listenera kada se pritisne dugme
    }
};

MyMouseListener myMouseListener;

void cIntro::Init(cGameEngine* game)
{
    ...
    text = new gcn::TextField("");
    text->setDimension(gcn::Rectangle(0, 0, 150, 20));
    text->setPosition(326, 180);
    top->add(text); //top je root kontejner koji drzi gui elemente
    ...
  
   dugme = new gcn::Button("Kreni");
   dugme->setPosition(455,141);
   dugme->addMouseListener(&myMouseListener); //listener se dodeljuje dugmetu
   top->add(dugme);
   ...
}

void cIntro::Cleanup(cGameEngine* game){...}

void cIntro::Pause(){...}

void cIntro::Resume(){...}

void cIntro::HandleEvents(cGameEngine* game){...}

void cIntro::Update(cGameEngine* game){ ...}

void cIntro::Draw(cGameEngine* game){ ...}

itd.

ovo je skraceni intro.h
Code:

class cIntro : public cGameState
{
public:
    void Init(cGameEngine* game);
    void Cleanup(cGameEngine* game);
    void Pause();
    void Resume();

    void HandleEvents(cGameEngine* game);
    void Update(cGameEngine* game);
    void Draw(cGameEngine* game);

    static cIntro* Instance() {
        return &m_Intro;
    }

protected:
    cIntro() { }

private:
    static cIntro       m_Intro;
    ...
    gcn::TextField*  text;
    gcn::Button*     dugme;
    ...
};

to je skraceni code za klasu cIntro. Dakle u istom fajlu imam klasu tog listenera koji se nasledjuje
iz gcn::MouseListener (radi se o Guichan gui biblioteci za igrice). cIntro i gcn::MouseListener
nisu niukakvoj vezi.
[ Mihajlo Cvetanović @ 14.08.2010. 23:18 ] @
Code:

class MyMouseListener : public gcn::MouseListener
{
public:
    cIntro* parent;

    void mouseReleased(gcn::MouseEvent& mouseEvent)
    {
        std::cout << "Mouse released: " << mouseEvent.getX() << " " << mouseEvent.getY() << std::endl;
        parent->text->setText("Neki text");
    }
};

void cIntro::Init(cGameEngine* game)
{
    ...
    myMouseListener.parent = this;
    ...
}



Postavi cIntro::text na public, ili ubaci public funkciju cIntro::setText.
[ Mr. Rejn @ 14.08.2010. 23:58 ] @
Tako je Mihajlo,ovo radi...
Hvala (za sad) :)