Jestem względnie nowa w C++ i bardzo długo szukałem odpowiedzi na tę rzecz, ale nigdy nie otrzymałem satysfakcjonującej odpowiedzi.Klasa wewnętrzna uzyskująca dostęp do klasy zewnętrznej
Załóżmy, że mam strukturę o nazwie FSM
. W końcu w moim kodzie można utworzyć wiele instancji FSM
. Jednym z atrybutów FSM
jest int X
, który nie jest statyczny, każde wystąpienie FSM
powinno mieć własną wartość dla X
.
Teraz, jeden z atrybutów FSM
„s jest inna struktura submachine
który musi odczytać wartość X
takiego:
struct FSM
{
public:
int x;
int getX(){return x;}
struct submachine
{
void onentry() {int g = getX();};
};
};
To daje następujący błąd:
Error: 'FSM::getX' : illegal call of non-static member function
Moje pytanie brzmi: , submachine
jest członkiem FSM
, więc czy nie powinien mieć dostępu do lokalnych instancji wszystkich atrybutów FSM
? A jeśli nie, kiedy stworzymy instancję FSM
, czy nie będziemy tworzyć instancji wszystkich jej członków, tj. submachine
? A jeśli tak, to dlaczego potrzebujemy stworzyć obiekt, którego potrzebuje onentry()
?
Przyjmuję, że kompilator jest poprawny, więc chciałbym również wiedzieć, czy istnieje sposób, aby to działało.
UWAGA: Niestety instancje wewnętrznych struktur (submachine
) są tworzone, gdy wywoływane jest zdarzenie, dlatego mogę tylko zdefiniować typ i nie tworzyć obiektów dla nich w FSM
.
czy jest sposób, w jaki osiągam to, co chcę osiągnąć? – Kam
Downvoter: czy chcesz się podzielić? –
(Przepraszamy za opóźnienie, znajdowaliśmy link). Zagnieżdżone klasy są członkami i mogą uzyskać dostęp do zewnętrznej klasy, tak jak każdy inny członek, patrz [DR 45] (http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#45), część standard od 2003 roku –