0

J'ai une classe de base abstraite, où certaines fonctions sont implémentées et d'autres purement virtuelles. Depuis cette classe de base, j'ai créé une classe dérivée qui implémente toutes les fonctions virtuelles.Comment puis-je savoir quelle méthode d'une classe dérivée n'est pas implémentée?

Cependant, il se plaint toujours que la classe dérivée est abstraite. Je suppose que j'ai oublié de mettre en œuvre une méthode, mais je ne peux pas voir laquelle. Est-il possible d'obtenir une liste des méthodes virtuelles héritées? J'utilise Visual Studio 2010.

+0

J'ai défini une nouvelle involontairement fonction qui est similaire à un hérité d'un, mais pas la même chose. Par conséquent, pour le compilateur, je définis une nouvelle fonction au lieu d'implémenter celle héritée. La différence était juste un "&" parce que je suis passé de l'appel par valeur à l'appel par référence ... La question demeure, cependant. – Fabian

+2

En C++ 11 ou version ultérieure, vous pouvez empêcher cette erreur particulière en ajoutant 'override' à la déclaration de toute fonction supposée être une substitution. Vous obtiendrez un message d'erreur amical s'il ne remplace rien. –

Répondre

2

Lorsque la compilation échoue en raison d'une tentative classe abstraite instanciation vous devriez obtenir la méthode exacte qui manque dans l'onglet de sortie, voir l'exemple suivant:

8>MVSystemTesting\ReportsServiceMock.cpp(10): error C2259: 'CMailslotIPCChannel' : cannot instantiate abstract class 
8>   due to following members: 
8>   'void CIPCChannelBase::Listen(void)' : is abstract 
8>   d:\tfs\IPCChannelBase.h(27) : see declaration of 'CIPCChannelBase::Listen' 

Ici vous peut voir que Listen n'est pas mis en œuvre.

Voici comment vous ouvrez l'onglet de sortie: Output tab