Clase interna que accede a la clase externa [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Acceso de la clase interna a los miembros de la clase externa 5 respuestas

Soy relativamente nuevo en C ++, y he buscado mucho por una respuesta para esto, pero nunca obtuve una respuesta satisfactoria.

Digamos que tengo una estructura llamadaFSM. Eventualmente en mi código, múltiples instancias deFSM se puede crear. Uno deFSMlos atributos de esint X Lo cual no es estático, cada instancia deFSM debe tener su propio valor paraX.

Ahora, uno deFSMLos atributos de es otra estructura.submachine que necesita leer el valor deX Me gusta esto:

struct FSM
{
  public:
    int x;

    int getX(){return x;}

    struct submachine
    {
        void onentry() {int g = getX();};
    };
};

Esto da el siguiente error:

Error: 'FSM :: getX': llamada ilegal de función miembro no estática

Mi pregunta es,submachine es miembro deFSM, por lo que no debería tener acceso a instancias locales de todos los atributos deFSM? Y si no, cuando creamos una instancia deFSM, ¿no estaríamos creando una instancia de todos sus miembros, es decir,submachine? Y si es así, entonces ¿por qué necesitamos crear un objeto queonentry() ¿necesariamente?

Asumo que el compilador es correcto, por lo que también me gustaría saber si hay una manera de hacer que esto funcione.

NOTA: Desafortunadamente, las instancias de las estructuras internas (submachine) se crean instancias cuando se llama a un evento y, por lo tanto, solo puedo definir el tipo y no instanciar objetos para ellos enFSM.

Respuestas a la pregunta(4)

Su respuesta a la pregunta