2011-01-31 19 views
103

Parece que no puedo usar una clase base como parámetro de función, ¿he echado a perder mi herencia?C++ inheritance - inaccesible base?

Tengo el siguiente en mi principal:

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

y la barra de clase que hereda de Foo de tal manera:

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

private: 
    //snip 
}; 

Si esto no funciona? No parecen ser capaces de hacer esa llamada en mi función principal

Respuesta

199

Tienes que hacer esto:

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

El tipo de herencia predeterminado de un class en C++ es private, por lo que cualquier public y protected los miembros de la clase base están limitados a private. struct herencia por otro lado es public de forma predeterminada.

19

Por defecto, la herencia es privada. Usted tiene que utilizar explícitamente public:

class Bar : public Foo

+9

Para ampliar: En un 'class', la herencia es' private'. En una 'struct', la herencia es' public' por defecto. –