Прежде всего, вы пытаетесь получить доступ к нестатическому члену var
вне класса, что недопустимо в C ++.
Ответ Марка правильный.
Все, что является частью Outer, должно иметь доступ для всех участников Outer, публичных или частных.
Таким образом, вы можете сделать две вещи: либо объявить var
как, static
либо использовать ссылку на экземпляр внешнего класса для доступа к 'var' (поскольку дружественный класс или функция также нуждаются в ссылке для доступа к частным данным).
Статический var
Измените var
на, static
если вы не хотите, var
чтобы вас связывали с экземплярами класса.
#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();
}
Выход- var: 1
Нестатическая переменная
Ссылка на объект должна обращаться к любым нестатическим переменным-членам.
#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);
}
Выход- var: 1
Изменить - внешние ссылки - это ссылки на мой блог.