2009-11-09 3 views
13

Je trouve que l'une des erreurs de compilation les plus fastidieuses pour moi est "impossible d'instancier une classe abstraite", car le problème est toujours que je n'avais pas l'intention que la classe être abstrait et le compilateur ne liste pas les fonctions qui sont abstraites. Il doit y avoir une façon plus intelligente de les résoudre que de lire les en-têtes 10 fois jusqu'à ce que je remarque finalement un "const" manquant quelque part. Comment résolvez-vous ces problèmes?Méthode de résolution d'erreur: "impossible d'instancier une classe abstraite"

+3

compilateur? – Naveen

+0

Certains compilateurs * DO * mentionnent quelle (s) méthode (s) a rendu la classe abstraite lorsque l'erreur d'instanciation se produit. –

Répondre

6

C++ vous indique exactement quelles fonctions sont abstraites, et où ils sont déclarés:

class foo { 
     virtual void x() const = 0; 
}; 

class bar : public foo { 
     virtual void x() { } 
}; 

void test() { 
     new bar; 
} 

test.cpp: In function ‘void test()’: 
test.cpp:10: error: cannot allocate an object of abstract type ‘bar’ 
test.cpp:5: note: because the following virtual functions are pure within ‘bar’: 
test.cpp:2: note:  virtual void foo::x() const 

Alors peut-être essayer de compiler votre code avec C++, ou indiquez votre compilateur pour que les autres peuvent donner des suggestions utiles pour votre compilateur spécifique.


45

cannot instantiate abstract class

Sur la base de cette erreur, je suppose que vous utilisez Visual Studio (puisque c'est ce que Visual C++ dit lorsque vous essayez d'instancier une classe abstraite). Regardez la fenêtre de sortie de Visual Studio (View => Output);

la sortie devrait inclure une déclaration après l'erreur indiquant:

stubby.cpp(10) : error C2259: 'bar' : cannot instantiate abstract class 
due to following members: 
'void foo::x(void) const' : is abstract 
stubby.cpp(2) : see declaration of 'foo::x' 

(C'est l'erreur donnée pour le code exemple de bdonlan)

Dans Visual Studio, la fenêtre « Liste d'erreurs » affiche uniquement la première ligne d'un Message d'erreur.

1

C++ Builder vous indique quelle méthode est abstraite:

class foo { 
    virtual void x() const = 0; 
}; 

class bar : public foo { 
    virtual void x() { } 
}; 

new bar; 

[BCC32 Error] File55.cpp(20): E2352 Cannot create instance of abstract class 'bar' 
[BCC32 Error] File55.cpp(20): E2353 Class 'bar' is abstract because of 'foo::x() const = 0' 
Questions connexes