2013-06-24 17 views
7

mam ah, jak pokazano poniżejC++ zainicjowany określona dla metody non-virtual

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

to mam bh jak pokazano poniżej

#include "a.h" 

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

jestem po prostu staramy się sprawdzić błędy składniowe, starając się skompilować nagłówki takie jak g++ -c a.h b.h

i ja się poniżej errror

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

Co oznacza ten błąd?

+1

Musi być deklarowany jako wirtualny: 'virtual void doSomething() = 0;' – jrok

+1

Dlaczego kompilujesz nagłówki? To jest dziwne. Czy jesteś nowy w projektowaniu projektów w C++? – Wug

Odpowiedz

9

Funkcja członkowska może być deklarowana jako abstrakcyjna (= 0), jeśli jest wirtualna. Dodaj słowo kluczowe virtual do deklaracji funkcji w klasie bazowej (w klasie A).

Jest to również dobra praktyka, aby powtórzyć virtual w deklaracji pochodnej funkcji składowej klasy, choć nie jest to konieczne ze względów technicznych nie (jak zasada „raz wirtualne, zawsze wirtualny”).

0

Oznacza to, że A Zrobić coś nie jest wirtualne, ale próbujesz uczynić go czystym wirtualnym.

4

Problem jest dokładnie taki, jak mówi kompilator.

class A 
{ 
public: 
    virtual void doSomething()=0; // virtual keyword needed 
}; 
Powiązane problemy