Classe interna acessando a classe externa [duplicada]
Esta questão já tem uma resposta aqui:
Acesso da Classe Interna aos membros da Classe Externa 5 respostasSou relativamente novo no C ++, e procurei muito por uma resposta para essa coisa, mas nunca obtive uma resposta satisfatória.
Digamos que eu tenha uma estrutura chamadaFSM
. Eventualmente no meu código, várias instâncias deFSM
pode ser criado. Um deFSM
atributos de s éint X
que não é estático, cada instância deFSM
deve ter seu próprio valor paraX
.
Agora, um dosFSM
Atributos é outra estruturasubmachine
que precisa ler o valor deX
como isso:
struct FSM
{
public:
int x;
int getX(){return x;}
struct submachine
{
void onentry() {int g = getX();};
};
};
Isso dá o seguinte erro:
Erro: 'FSM :: getX': chamada ilegal da função de membro não estático
Minha pergunta é,submachine
é um membro deFSM
, então não deveria ter acesso a instâncias locais de todos os atributos deFSM
? E se não, quando criamos uma instância deFSM
, não estaríamos criando uma instância de todos os seus membros, ou seja,submachine
? E se sim, então por que precisamos criar um objeto queonentry()
necessidades?
Eu estou supondo que o compilador está correto, então eu também gostaria de saber se há uma maneira de fazer isso funcionar.
NOTA: Infelizmente, as instâncias das estruturas internas (submachine
) são instanciados quando um evento é chamado e, portanto, só posso definir o tipo e não instanciar objetos para eles emFSM
.