2014-04-23 16 views
30

jestem coraz niezdefiniowanej odniesienie do `vtable dla studenta” podczas kompilacji następujący plik nagłówka:nieokreślone odniesienie do „vtable dla klasy” konstruktora

student.h

class student 
{ 
private: 
    string names; 
    string address; 
    string type; 

protected: 
    float marks; 
    int credits; 

public: 
    student(); 
    student(string n,string a,string t,float m); 
    ~student(); 
    string getNames(); 
    string getAddress(); 
    string getType(); 
    float getMarks(); 
    virtual void calculateCredits(); 
    int getCredits(); 
}; 

student::student(){} 

student::student(string n, string a,string t,float m) 
{ 
    names = n; 
    address = a; 
    marks = m; 
} 

student::~student(){} 

nie mogę znaleźć co jest w tym złego.

Odpowiedz

60

Ty deklarowania virtual funkcję i nie definiując go:

virtual void calculateCredits();

Albo zdefiniować lub zadeklarować ją jako:

virtual void calculateCredits() = 0;

lub po prostu:

virtual void calculateCredits() { };

Więcej o vftable: http://en.wikipedia.org/wiki/Virtual_method_table

+0

Dziękuję, to działało .. faktycznie jest to tylko część pliku nagłówka, mam poniżej której inna klasa wykorzystuje calculateCredits function() myślałem, nie było potrzeby, aby zdefiniować w klasie studenta. – Tarounen

+4

W większości ABI, vtable są emitowane w kompilatorze definiującym pierwszą wirtualną funkcję nie zdefiniowaną w definicji klasy. Jeśli tego nie ma, będzie on emitowany we wszystkich. Wiele takich obiektów zostanie złożonych. – Deduplicator

+3

Otrzymuję ten sam błąd pomimo zdefiniowania funkcji wirtualnej, jak pokazano powyżej. Czy może być coś jeszcze, czego mi brakuje? – Naveen

Powiązane problemy