2013-06-24 10 views
7

ho ah come mostrato sottoC++ inizializzato specificati per il metodo non virtuale

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

Poi ho bh come mostrato sotto

#include "a.h" 

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

sto solo cercando di controllare gli errori di sintassi cercando di compilare intestazioni quali g++ -c a.h b.h

e ottengo sotto errror

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

Che cosa significa questo mezzo di errore?

+1

Ha bisogno di essere dichiarati virtuale: 'virtual doSomething void() = 0;' – jrok

+1

Inoltre, perché stai compilando le intestazioni? Quello è strano. Sei nuovo nella strutturazione di progetti in C++? – Wug

risposta

9

Una funzione membro può essere dichiarato abstract (= 0) se è virtuale. Aggiungere la parola chiave virtual alla dichiarazione della funzione nella classe base (nella classe A).

E 'inoltre consigliabile ripetere virtual nella dichiarazione della funzione membro della classe derivata, anche se non è tecnicamente necessario lì (come la regola è "una volta virtuale, sempre virtuale".)

0

significa che A Fare qualcosa non è virtuale, ma stai cercando di renderlo puro virtuale.

4

Il problema è esattamente quello che dice il compilatore.

class A 
{ 
public: 
    virtual void doSomething()=0; // virtual keyword needed 
}; 
Problemi correlati