En primer lugar, está intentando acceder a miembros no estáticos var
fuera de la clase que no está permitido en C ++.
La respuesta de Mark es correcta.
Todo lo que sea parte de Outer debe tener acceso a todos los miembros de Outer, públicos o privados.
Entonces, puede hacer dos cosas, declarar var
como static
o usar una referencia de una instancia de la clase externa para acceder a 'var' (porque una clase o función amiga también necesita una referencia para acceder a datos privados).
Var estática
Cambie var
a static
Si no desea var
estar asociado con las instancias de la clase.
#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();
}
Salida- var: 1
Var no estática
La referencia de un objeto debe acceder a cualquier variable miembro no estática.
#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);
}
Salida- var: 1
Editar: los enlaces externos son enlaces a mi blog.