Как вызывать функции внешних классов с тем же именем, что и вызывающая функция внутреннего класса?
Вам необходимо создать экземпляр класса перед попыткой для прямого доступа к функциям-членам.
Таким образом, есть два способа сделать это:
Объявить сигнатуру функции с помощью static
.
Создайте экземпляр Outer
и получите доступ к функции-члену с помощью оператора точки.
Пример 1:
struct Outer {
struct Inner {
void a(int i) {
Outer::a(i); // direct member function access
}
};
static void a(int i) { // declared as static
std::cout << i << std::endl;
}
};
int main(void) {
Outer::Inner in;
in.a(10); // Inner class calls the member of Outer class's a(int)
return 0;
}
Пример 2:
struct Outer {
struct Inner {
void a(int i) {
Outer x; // instance to the class Outer
x.a(i); // accessing the member function
}
};
void a(int i) { // outer class definition
std::cout << i << std::endl;
}
};
int main(void) {
Outer::Inner in; // creating an instance of Inner class
in.a(10); // accessing the Inner member function (which accesses
// Outer class member function)
return 0;
}