2010-11-26 8 views
0

Ich versuche, die get() in einer Header-Datei von C++ zu implementieren:C++ :: GET & SET in einer Header-Datei

Zum Beispiel: das ist die Datei: test.hpp

class A { 
public: 
A(std::string f, int id):file(f), index(id){}; 

std::string getFile(){return file;}; 
int getIndex(){return id;}; 

private: 
    std::string file; 
    int index; 
}; 
} 

Aber Dann bekomme ich ein Problem:

undefined Verweis auf 'vtable A'.

Wie kann ich fortfahren?

+1

Bitte senden Sie den genauen Code Sie verwenden. Der obige Code (abgesehen von einer redundanten schließenden Klammer) sollte funktionieren und wird Ihnen den Fehler, den Sie sehen, sicherlich nicht geben. –

+3

Nun, außer dass er _id_ zurückgibt, wenn seine Klasse ein Mitglied namens _index_ enthält. – Chowlett

Antwort

3
int getIndex(){return id;}; 

Es gibt kein Mitglied 'id' genannt, so sollte diese Zeile sein

int getIndex(){return index;}; 

Dann Sie eine closen Klammer zu viel haben. Beachten Sie außerdem, dass nach den geschweiften Klammern kein Semikolon mehr erforderlich ist. Außerdem sollten Klassenmitglieder, die das Objekt nicht modifizieren, immer als const deklariert werden, was enorm hilft, ein konsistentes Konzept darüber zu behalten, was Änderungen bewirken soll und was nicht.

Dies ist, wie es schließlich aussehen würde:

#include <string> 

class A { 
public: 
A(std::string f, int id):file(f), index(id){} 

std::string getFile() const {return file;} 
int getIndex() const {return index;} 

private: 
    std::string file; 
    int index; 
}; 
+3

Dies beantwortet jedoch nicht, wie der Compiler einen Fehler über eine fehlende vtable ausgeben würde, aber der ursprüngliche Code enthält nichts, was dies erzeugen könnte. – Mephane

+2

und vergessen Sie nicht, die Consts hinzuzufügen – CashCow

+0

Sie haben Recht, getFile und getIndex sollte const sein, fügte dies hinzu. – Mephane