2009-11-09 17 views
13

Uważam, że jednym z najbardziej czasochłonnych błędów kompilatora jest "nie można utworzyć instancji klasy abstrakcyjnej", ponieważ problem jest zawsze taki, że nie zamierzałem, aby klasa być abstrakcyjne, a kompilator nie podaje, które funkcje są abstrakcyjne. Musi istnieć inteligentniejszy sposób rozwiązania tych problemów niż czytanie nagłówków 10 razy, aż wreszcie zauważę gdzieś brakujący "const". Jak rozwiązać te problemy?Metoda rozwiązywania błędów: "nie można utworzyć instancji klasy abstrakcyjnej"

+3

który kompilatora? – Naveen

+0

Niektóre kompilatory * DO * wskazują, które metody spowodowały, że klasa jest abstrakcyjna, gdy wystąpi błąd instancji. –

Odpowiedz

6

C++ powie ci dokładnie, jakie funkcje są abstrakcyjne, a gdy zostały zgłoszone:

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 

Więc może spróbuj kompilowania kodu z C++, lub określić kompilatora więc inni mogą dać przydatnych wskazówek dla konkretnego kompilatora.


45

cannot instantiate abstract class

Na podstawie tego błędu, wydaje mi się, że używasz Visual Studio (ponieważ to co mówi Visual C++ podczas próby utworzenia wystąpienia klasy abstrakcyjnej).

Spójrz na okno wyjściowe Visual Studio (Widok => Dane wyjściowe); wyjście powinno zawierać oświadczenie po błędu stwierdzając:

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' 

(To jest błąd podane na przykład kodu bdonlan za)

W Visual Studio, tylko okno „Lista błędów” wyświetla pierwszą linię Komunikat o błędzie.

1

C++ Builder mówi, która metoda jest abstrakcyjna:

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' 
Powiązane problemy