2010-03-30 6 views
3

J'ai une classe A qui prend une référence de B dans son constructeur.Puis-je transmettre une classe enfant à une référence d'une classe parente?

class A { 
    public: 
    A(B& b); 
    } 

Et j'ai un SubB de classe qui est une classe enfant de B:

class SubB : public B { 
    //omitted... 
} 

Dans mon code, je crée un SubB et de le transmettre à A:

SubB subB; 
    A a(subB); 

Mais Je reçois cette compilation Erreur:

erreur: «B» est une base inaccessible de «SubB»

Puis-je transmettre une référence de SubB en tant que B?

Merci.

+3

Est-ce que 'B' est la seule base de' SubB'? (c'est-à-dire que vous avez accidentellement fait l'erreur ': public X, Y'?) – Amber

+0

Quel compilateur utilisez-vous? Et sont-ils tous dans le même fichier C++? – Uri

+0

Le code a l'air bien sur la base des informations que vous avez fournies. Je pense qu'il y en a d'autres. S'il vous plaît partager l'exemple de code complet. –

Répondre

1

Le code affiché semble correct bien que la déclaration de class B soit manquante. Publier un extrait plus complet - votre problème est susceptible d'égarer les fichiers include et les déclarations de classe.

+0

Merci. C'est la cause première de mon problème. Je résous ça maintenant. – michael

0

Oui, le passage d'une instance de classe dérivée à une fonction qui prend une référence de classe de base est OK. Votre exemple compile pour moi, cependant, et ne semble pas devoir produire cette erreur - une «classe de base inaccessible» fait généralement référence à quelque chose qui a été étendu via un héritage protégé ou privé plutôt que par héritage public. Pourriez-vous poster un exemple plus complet?

Questions connexes