Problem udało mi się rozwiązać, faktem, że w sposób trochę dziwny i możliwe, że to jest właśnie takie "obejście", o którym wspominałem w pytaniu, ale działa :D
Postaram się tu przepisać uproszczoną wersję tego kodu, bo moja jest mocno związana z działaniem gry, dlatego mogłaby być nieczytelna:
// ObjectsReferences.h (Nowy Plik)
#include "A.h"
using namespace std;
extern A *aReference;
int *getValue1Reference();
int *getValue2Reference();
// ObjectsReferences.cpp (Nowy Plik)
#include "ObjectsReferences.h"
A *aReference;
int *getValue1Reference()
{
return &aReference->value1;
}
int *getValue2Reference() // Ta funckja będzie musiała zostać zaprzyjaźniona z klasą A, bo próbuje uzyskać dostęp do prywatnych danych
{
return &aReference->value2;
}
// A.h
class A
{
// Każda funkcja chcąca korzystać z prywatnych składowych będzie musiała mieć tutaj swoją własną linijkę
friend int *getValue2Reference();
public:
A();
void function();
int value1;
private:
int value2;
};
// A.cpp
#include "A.h"
A::A()
{}
void A::function()
{
b.doSomething();
}
// Klasa B
#include "ObjectsReferences.h"
class B
{
public:
B()
{}
void doSomething()
{
value = getValue1Reference();
value = getValue2Reference();
// W tym momencie możemy dowolnie manipulować zmiennymi klasy A
// To samo można zastosować przy obiektach innych klas, tutaj podałem przykład z int
}
int *value; // To MUSI BYĆ WSKAŹNIK
};
//main.cpp
int main()
{
A a;
extern A *globalObj; // To jest ważna część
globalObj = &a; // I to
a.function();
}
Ogólnie rzecz biorąc, kod ma swoje wady, ale jeśli chcemy korzystać tylko z publicznych pól lub funkcji naszej klasy (A), to wystarczy skorzystać z wskaźnika, który u mnie nazywał się 'aReference'.
Mam nadzieję, że komuś pomogłem ;D