2014-04-23 11 views
30

sto ottenendo un undefined reference to `vtable per gli studenti' durante la compilazione della seguente file di intestazione:undefined reference to 'vtable per la classe' costruttore

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(){} 

non riesco a trovare cosa c'è di sbagliato in questo

risposta

60

Stai dichiarare una funzione virtual e non definendolo:

virtual void calculateCredits();

O definirla o dichiareremo come:

virtual void calculateCredits() = 0;

O semplicemente:

virtual void calculateCredits() { };

Leggi di più riguardo vftable: http://en.wikipedia.org/wiki/Virtual_method_table

+0

ringraziamento, ha funzionato .. in realtà questo è solo una parte del file di intestazione, ho un'altra classe di sotto della quale utilizza i calculateCredits funzione() ho pensato che non vi era alcuna necessità di definire nella classe dello studente .. – Tarounen

+4

Nella maggior parte degli ABI, il vtable viene emesso nell'unità di compilazione che definisce la prima funzione virtuale non definita nella definizione della classe. Se non ce n'è, verrà emesso in tutto. Più oggetti simili verranno quindi piegati. – Deduplicator

+3

Ricevo lo stesso errore nonostante abbia definito la funzione virtuale come mostrato sopra. Potrebbe esserci qualcos'altro che mi manca? – Naveen

Problemi correlati