2013-06-24 8 views
7

Ich habe ah, wie unten gezeigtC++ initialisiert für nicht-virtuelle Methode angegeben

class A 
{ 
public: 
    void doSomething()=0; 
}; 

Dann i bh haben, wie unten

gezeigt
#include "a.h" 

class b: public A 
{ 
public: 
    void doSomething(); 
}; 

ich nur auf Syntaxfehler zu überprüfen, ich versuche, indem sie versuchen, zu kompilieren Header wie g++ -c a.h b.h

und ich bekomme unter errror

a.h:4: error: initializer specified for non-virtual method 'void A::doSomething()'

Was bedeutet dieser Fehler?

+1

Es muss als virtuell deklariert werden: 'virtual void doSomething() = 0;' – jrok

+1

Auch, warum kompilieren Sie Header? Das ist komisch. Sind Sie neu in der Strukturierung von Projekten in C++? – Wug

Antwort

9

Eine Memberfunktion kann nur als abstrakt deklariert werden (= 0), wenn sie virtuell ist. Fügen Sie der Funktionsdeklaration in der Basisklasse (in Klasse A) das Schlüsselwort virtual hinzu.

Es ist auch eine gute Praxis virtual in der Deklaration der abgeleiteten Klasse Memberfunktion zu wiederholen, obwohl es dort technisch nicht notwendig ist (wie die Regel „einmal virtuell, immer virtuell.“)

0

Es bedeutet, dass A Etwas tun ist nicht virtuell, aber Sie versuchen, es rein virtuell zu machen.

4

Das Problem ist genau das, was der Compiler sagt.

Verwandte Themen