2009-11-09 32 views
13

Me parece que uno de los errores de compilación más lentos para mí es "no se puede crear una instancia de clase abstracta", ya que el problema es que no pretendía que la clase ser abstracto y el compilador no enumera qué funciones son abstractas. Tiene que haber una manera más inteligente de resolver esto que leer los encabezados 10 veces hasta que finalmente note un "const" perdido en alguna parte. ¿Cómo resuelves esto?Método para resolver el error: "no se puede crear una instancia de clase abstracta"

+3

cuales compilador? – Naveen

+0

Algunos compiladores * DO * mencionan qué método (s) hizo que la clase sea abstracta cuando se produce el error de instancia. –

Respuesta

6

C++ te dice exactamente qué funciones son abstractas, y en el que se declaran:

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 

Así que tal vez tratar de compilar el código con C++, o especificar su compilador para que otros puedan dar sugerencias útiles para su compilador específico.


45

cannot instantiate abstract class

Sobre la base de este error, mi conjetura es que está utilizando Visual Studio (ya que eso es lo que Visual C++ dice cuando intenta crear una instancia de una clase abstracta).

Mire la ventana Salida de Visual Studio (Ver => Salida); la salida debe incluir una declaración después de que el error que indica:

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' 

(Ese es el error dado para el código de ejemplo de bdonlan)

En Visual Studio, la ventana "Lista de errores" sólo se muestra la primera línea de una mensaje de error.

1

C++ Builder le dice qué método es abstracto:

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' 
Cuestiones relacionadas