tengo el siguiente ejemplo de código que no se compila:herencia privada: nombre del error de búsqueda
#include <stdio.h>
namespace my
{
class base1
{ // line 6
};
class base2: private base1
{
};
class derived: private base2
{
public:
// The following function just wants to print a pointer, nothing else!
void print(base1* pointer) {printf("%p\n", pointer);}
};
}
El error que las impresiones GCC es:
test.cpp:6: error: `class my::base1' is inaccessible
test.cpp:17: error: within this context
Ahora, puedo adivinar cuál es el problema es: al mirar la declaración de print
, el compilador ve base1
y piensa: base1
es el subobjeto de clase base de derived* this
, ¡pero no tiene acceso a él! Aunque pretendo que base1
sea solo un nombre de tipo.
¿Cómo puedo ver en el estándar de C++ que este es un comportamiento correcto y no un error en el compilador (estoy seguro de que no es un error, todos los compiladores que revisé se comportaron de esa manera)?
¿Cómo puedo reparar este error? Todas las siguientes correcciones funcionan, pero ¿cuál debo elegir?
void print(class base1* pointer) {}
void print(::my:: base1* pointer) {}
class base1; void print(base1* pointer) {}
Editar:
int main()
{
my::base1 object1;
my::derived object3;
object3.print(&object1);
}
Se puede publicar el main()? –
¡Buen ejemplo que muestra que la herencia privada no es lo mismo que la composición! – curiousguy