2011-01-31 19 views
103

Mi sembra di non essere in grado di utilizzare una classe base come parametro di funzione, ho incasinato la mia ereditarietà?C++ ereditarietà - base inaccessibile?

Ho il seguente nel mio principale:

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

E la classe che eredita da bar Foo in modo tale:

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

private: 
    //snip 
}; 

Nel caso questo non funziona? Non mi sembra di essere in grado di fare quella chiamata nella mia funzione principale

risposta

199

Devi fare questo:

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

Il tipo di ereditarietà di default di un class in C++ è private, in modo che qualsiasi public e protected i membri della classe base sono limitati a private. L'ereditarietà struct invece è public per impostazione predefinita.

19

Per impostazione predefinita, l'ereditarietà è privata. È necessario utilizzare in modo esplicito public:

class Bar : public Foo

+9

Per espandere: In un 'class', l'ereditarietà è' private'. In una 'struct', l'ereditarietà è' public' di default. –