undefined reference to `vtable for Triangle'

index
Neuling
Neuling
Beiträge: 3
Registriert: 5. Dez 2011 21:36

undefined reference to `vtable for Triangle'

Beitrag von index »

Juhu,

hab hier einen unglaublich unangenehmen Fehler, der da lautet:
/triangle.h:9: undefined reference to `vtable for Triangle'
triangle.h:9 entspricht Triangle(Color c, Vec3d v1, Vec3d v2, Vec3d v3) : FiniteShape(c), vertex1(v1), vertex2(v2), vertex3(v3){}

Hier eine gekürzte Form meiner Methode:

shapereader.h

Code: Alles auswählen

static std::vector<FiniteShape*> readFiniteShapeFile(std::string path){
   /*Hilfsvariablen anlegen*/
    vector<FiniteShape*> result;
    Color color;
    Vec3d vec3d[3] = {};
   
    /*
    ... hier steht der parser, der die Informationen der .txt in color bzw. vec3d schreibt.
    */
   
     Triangle triangle(color,vec3d[0],vec3d[1],vec3d[2]);     // triangle wurde erzeugt und man kann z.B. durch triangle.getColor().r den r Wert auslesen
    
     result.push_back(&triangle); // HIER KNALLTS!!!
}
Jemand ne Idee? Übersehe vlt. etwas triviales. Besten Dank schon mal : )

genix
Windoof-User
Windoof-User
Beiträge: 39
Registriert: 16. Okt 2010 13:41

Re: undefined reference to `vtable for Triangle'

Beitrag von genix »

Hast du den Konstruktor von Triangle definiert? Normalerweise kommt ein 'vtable for ...' Fehler nur, wenn gcc eine Funktion nicht finden kann. (also in der .h deklariert aber nicht in der .cpp definiert)

index
Neuling
Neuling
Beiträge: 3
Registriert: 5. Dez 2011 21:36

Re: undefined reference to `vtable for Triangle'

Beitrag von index »

Der Fehler lag an den bis dato noch nicht implementierten Methoden "intersect(), getAABBMin(), getAABBMax(), getVertex(int)".

Durch die folgenden vorläufigen Methodenimplementierungen verschwindet der Fehler:

triangle.h

Code: Alles auswählen

bool Triangle::intersect(Shape& s){}
Vec3d Triangle::getAABBMin(){}
Vec3d Triangle::getAABBMax(){}
Vec3d Triangle::getVertex(int){}
Es knallte btw. schon früher. Die Erzeugung eines Triangle pointers

Code: Alles auswählen

Triangle* triangle = new Triangle(color,vec3d[0],vec3d[1],vec3d[2]);
verursachte ebenfalls den zuvor beschriebenen Fehler.

Warum man eine Instanzvariable bilden konnte ohne einen Fehler zu bekommen ist mir dabei ein Rätsel.

Benutzeravatar
_andreas
Windoof-User
Windoof-User
Beiträge: 37
Registriert: 13. Okt 2009 13:45
Kontaktdaten:

Re: undefined reference to `vtable for Triangle'

Beitrag von _andreas »

Schreibst du die methodendefinitionen in die header-datei einfach mit rein? Ist das eine so gute idee?

index
Neuling
Neuling
Beiträge: 3
Registriert: 5. Dez 2011 21:36

Re: undefined reference to `vtable for Triangle'

Beitrag von index »

Schreibst du die methodendefinitionen in die header-datei
-> Ja
Ist das eine so gute idee?
-> Nein

Ich machte es einfach aus Testzwecken schnell in die header-Datei.

Antworten

Zurück zu „Archiv“