Em primeiro lugar, você está tentando acessar um membro não estático var
fora da classe, o que não é permitido em C ++.
A resposta de Mark está correta.
Qualquer coisa que faça parte da Outer deve ter acesso a todos os membros da Outer, públicos ou privados.
Portanto, você pode fazer duas coisas, declarar var
como static
ou usar uma referência de uma instância da classe externa para acessar 'var' (porque uma classe ou função amiga também precisa de referência para acessar dados privados).
Var estática
Mude var
para static
Se você não quiser var
ser associado às instâncias da classe.
#include <iostream>
class Outer {
private:
static const char* const MYCONST;
static int var;
public:
class Inner {
public:
Inner() {
Outer::var = 1;
}
void func() ;
};
};
int Outer::var = 0;
void Outer::Inner::func() {
std::cout << "var: "<< Outer::var;
}
int main() {
Outer outer;
Outer::Inner inner;
inner.func();
}
Saída- var: 1
Var não estático
A referência de um objeto deve acessar quaisquer variáveis de membro não estáticas.
#include <iostream>
class Outer {
private:
static const char* const MYCONST;
int var;
public:
class Inner {
public:
Inner(Outer &outer) {
outer.var = 1;
}
void func(const Outer &outer) ;
};
};
void Outer::Inner::func(const Outer &outer) {
std::cout << "var: "<< outer.var;
}
int main() {
Outer outer;
Outer::Inner inner(outer);
inner.func(outer);
}
Saída- var: 1
Editar - Links externos são links para meu blog.