Em primeiro lugar, você está tentando acessar um membro não estático varfora 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 varcomo staticou 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 varpara staticSe você não quiser varser 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.