Herencia de C ++: ¿base inaccesible?

157

Parece que no puedo usar una clase base como parámetro de función, ¿he estropeado mi herencia?

Tengo lo siguiente en mi principal:

int some_ftn(Foo *f) { /* some code */ };
Bar b;
some_ftn(&b);

Y la clase Bar hereda de Foo de tal manera:

class Bar : Foo
{
public:
    Bar();
    //snip

private:
    //snip
};

¿No debería funcionar esto? Parece que no puedo hacer esa llamada en mi función principal

bandai
fuente

Respuestas:

287

Tienes que hacer esto:

class Bar : public Foo
{
    // ...
}

El tipo de herencia predeterminado de a classen C ++ es private, por lo que cualquiera publicy los protectedmiembros de la clase base están limitados a private. structLa herencia por otro lado es publicpor defecto.

Andrew Noyes
fuente
28

Por defecto, la herencia es privada. Tienes que usar explícitamente public:

class Bar : public Foo

Jim Buck
fuente
14
Para expandir: En a class, la herencia es private. En a struct, la herencia es publicpor defecto.
Travis Gockel