zmiana zmiennej z poziomu klasy dołączanej

0

Witam, mam dwie klasy A i B:
w klasie A załączam includem klasę B.
Chciałbym w klasie B napisać funkcję, która zmodyfikuje wartość zmiennej w klasie A.
Jak to zrobić?

dodam, że klasa B jest to klasa, która przechowuje kilka stringów i kilka metod.
Natomiast w klasie A chodzi mi konkretnie o zmodyfikowanie pola tekstowego wxStaticText.
Jak zrobić, aby w klasie B był do niego dostęp?

0
struct A;
struct B
  {
   void change(A &a);
  };

struct A
  {
   int value;
  };

void change(A &a)
  {
   a.value=0;
  }
0

a może trochę objaśnienia?
wystarczy, że włożę rzeczy które chce pozmieniać w klasie A do jakiejś nowej struktury i tyle?
czemu B też zmieniłeś na strukturę?

0

No dobra teoretycznie działa zrobiłem taką funkcję w klasie B:
zmienna tekst jest w klasie A

klasa A to bito_blaster
klasa B to nagranie

void nagranie::change(wxCommandEvent& event, bito_blaster &wartosc){
	wartosc.tekst->SetLabel("asd");
}

tylko tutaj mały problem chciałbym, w klasie A połączyć wywołanie funkcji B z naciśnięciem przycisku który znajduje się w klasie A oczywiście.

Connect( btRECORD, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(nagranie::change));
jak to zrobić? jak napisać tego connecta, czy w fragmencie "nagranie::change" trzeba dodac do change jakies argumenty?

funkcja change musi mieć wxCommandEvent w argumencie z tego co wiem, bo inaczej nie da się jej wcisnąć do wxCommandEventHandler.
W skrócie 2 problemy:
**** Jak zrobić, aby klasa A znała funkcje z klasy B, a klasa B znała zmienne klasy A - jak zainkludować nagłówki, aby nie było redefinicji i aby klasa nie zawierała sama siebie?
Jak w klasie A połączyć zdarzenie nacisnięcia przycisku z tej klasy z funkcją klasy B, tak aby została wywołana z odpowiednim argumentem?** ( musi wykonać podmianę swojej zmiennej tekst za posrednictwem funkcji innej klasy)**

0
  1. friend, include guard.
  2. Tego nie w zab nie rozumiem
0

Naprawdę nie rozumiem w czym problem?

//PLIK B.H
struct A;
struct B
  {
   int value;
   void change(A &a);
  };

//PLIK A.H 
struct A
  {
   int value;
   void change(B &b) { b.value=0; }
  };

//PLIK B.CPP
void B::change(A &a) { a.value=0; }
0

No właśnie widzę, że nie rozumiesz. Może przeczytaj jeszcze raz...

Napisałeś mi funkcje, która zmienia wartość klasy A poprzez funkcję klasy B... OKEJ! Tylko, że funkcja change nie może zawierać tylko tego obiektu klasy A, ale również argument klasy wxCommandEvent.
Funkcję tą bowiem chcę połączyć w klasie A, konkretnie w konstruktorze ( OBYDWIE KLASY SĄ W ODDZIELNYCH PLIKACH! ) makrem Connect (biblioteka wxWidgets) z zdarzeniem naciśnięcia przycisku znajdującego się w klasie A.

Napisałem coś takiego "tylko tutaj mały problem: chciałbym, w klasie A połączyć wywołanie funkcji B z naciśnięciem przycisku który znajduje się w klasie A oczywiście.

Connect( btRECORD, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(nagranie::change));
jak to zrobić? jak napisać tego connecta, czy w fragmencie "nagranie::change" trzeba dodac do change jakies argumenty?

0

Napisałeś mi funkcje, która zmienia wartość klasy A poprzez funkcję klasy B... OKEJ! Tylko, że funkcja change nie może zawierać tylko tego obiektu klasy A, musi również zawierać argument klasy wxCommandEvent. (no chyba ze znasz jakąś inną metode na to).
Funkcję tą bowiem chcę połączyć w klasie A, konkretnie w konstruktorze ( OBYDWIE KLASY SĄ W ODDZIELNYCH PLIKACH! ) makrem Connect (biblioteka wxWidgets) z zdarzeniem naciśnięcia przycisku znajdującego się w klasie A.

// B.h
#include <wx/wx.h>
#include "class A.h"

class B{
public:
void change(A &a);
}
// B.cpp
B::change(wxCommandEvent& event, A &a){
a.tekst->SetLabel("asd");
}

//A.h
#include <wx/wx.h>
#include "class B.h"
//klasa ta zawiera oczywiscie tez przycisk nazwijmy go X, oraz enum w ktorym ma jego ID

class A{
public:
wxStaticText *tekst;
A();
}

//A.cpp
A::A{
//i teraz jak napisac tego connecta?
Connect( btRECORD, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(A::change));

// ?????

//connect musi wiedziec, ze po nacisnięciu przycisku chcę uruchomic funkcję change z argumentami event, oraz obiekt klasy A w którym została uruchomiona funkcja (taka incepcja mala:D )
}

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