2009-11-09 17 views
13

Trovo che uno degli errori del compilatore più dispendiosi in termini di tempo per me è "impossibile istanziare la classe astratta", poiché il problema è sempre che non intendevo per la classe essere astratto e il compilatore non elenca quali funzioni sono astratte. Deve esserci un modo più intelligente per risolverli rispetto alla lettura delle intestazioni 10 volte fino a quando finalmente noterò un "const" mancante da qualche parte. Come risolvi questi?Metodo per risolvere l'errore: "impossibile istanziare la classe astratta"

+3

quale compilatore? – Naveen

+0

Alcuni compilatori * DO * indicano quale metodo/i ha causato l'astrazione della classe quando si verifica l'errore di istanza. –

risposta

6

C++ ti dice esattamente quali funzioni sono astratti, e dove sono dichiarate:

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 

Quindi, forse, provare a compilare il codice con C++, o specificare il compilatore così gli altri possono dare suggerimenti utili per la vostra specifica del compilatore.


45

cannot instantiate abstract class

Sulla base di questo errore, la mia ipotesi è che si utilizza Visual Studio (dal momento che è quello di Visual C++ dice quando si tenta di creare un'istanza di una classe astratta).

Guarda la finestra di output di Visual Studio (Visualizza => Output); l'uscita dovrebbe contenere una dichiarazione dopo l'errore affermando:

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' 

(Questo è l'errore di data per il codice di esempio di bdonlan)

In Visual Studio, la finestra "Elenco errori" visualizza solo la prima riga di un messaggio di errore.

1

C++ Builder ti dice quale metodo è astratto:

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' 
Problemi correlati