El ejemplo aquí no tiene sentido, pero esto es básicamente cómo escribí mi programa en Python, y ahora estoy reescribiéndolo en C++. Todavía estoy tratando de comprender la herencia múltiple en C++, y lo que tengo que hacer aquí es acceder a A :: a_print desde main a través de la instancia de C. A continuación verás de lo que estoy hablando. es posible?Accediendo a un miembro/método de una clase derivada virtual
#include <iostream>
using namespace std;
class A {
public:
void a_print(const char *str) { cout << str << endl; }
};
class B: virtual A {
public:
void b_print() { a_print("B"); }
};
class C: virtual A, public B {
public:
void c_print() { a_print("C"); }
};
int main() {
C c;
c.a_print("A"); // Doesn't work
c.b_print();
c.c_print();
}
Aquí está el error de compilación.
test.cpp: In function ‘int main()’:
test.cpp:6: error: ‘void A::a_print(const char*)’ is inaccessible
test.cpp:21: error: within this context
test.cpp:21: error: ‘A’ is not an accessible base of ‘C’
Bingo. Eso lo entendió Gracias. – Scott
Ese es un buen punto: es suficiente para hacer pública una de las dos rutas de herencia para otorgar acceso. El camino tomado es el que proporciona el mayor acceso. –