undefined reference- komme nicht weiter
-
Hallo, vielleicht kann mir jemand helfen:
Ich möchte ein Objekt konstruieren, das in seinem Konstruktor ein Objekt vom Typ std::vector hat.
Hier der Konstruktor:
CFlaeche(std::vector<std::vector<Vec3d> > VList);Wenn ich in meinem Programm jetzt folgendes versuche:
CFlaeche* Fl1 = new CFlaeche(v_liste);Wobei v_liste so aussieht:
static std::vector<std::vector<Vec3d> > v_liste;Bekomme ich die Fehlermeldung:
undefined reference to `CFlaeche::CFlaeche(std::vector<std::vector<Vector<double>, std::allocator<Vector<double> > >, std::allocator<std::vector<Vector<double>,
Nur werde ich da nicht ganz schlau draus. Im Konstruktor von CFlaeche ist genau das definiert (ein std::vector, welcher wiederum std::vector aufnhemen kann), was dem Konstruktor auch übergeben wird. Warum "undefined reference"?

//Edit: Tag korrigiert
-
Ich denke, es wird an dem static liegen.
Mach das mal weg und versuch es erneut.
Warum machst du die Variable überhaupt static?
-
Leider nein- ohne static gibt es den Gleichen Fehler.
-
Also bei mir hat das gerade auch mit einem drei-dimensionalen vector geklappt.
Auch mit static.
Als was ist denn Vec3d definiert?
-
Überprüf mal Includes, Include Guards, Linkereinstellungen etc.
-
undefinede reference bedeutet der linker kann den funktions body NICHT finden.
Mfg Shade37337
-
Mit anderen Worten, er findet den Code, den ich für den Konstruktor
CFlaeche(std::vector<std::vector<Vec3d> > VList);geschrieben habe nicht?
Hilfe...der steht in 'ner cpp File wo der zugehörige Header auch eingebunden ist, und dieser Header ist auch in der Datei eingebunden, wo der Funktionsaufruf steht. Seltsam.
-
jep..so isses...
d.h. wenn du must warscheinlich noch die.cpp dem project hinzufügen oda sowas ähnlichesMfg Shade37337
-
jetzt klappts (fast). Nachdem ich vergeblich versucht habe, den Konstruktor in eine eigene *.cpp zu scvhreiben habe ich es einfach inline versucht, und zumindest tritt der alte Fehler nicht mehr auf.
Dafür ein Neuer und es ist wieder eine "undefined reference", diesmal noch mysteriöser:
undefined reference to `vtable for CFlaeche'
collect2: ld gab 1 als Ende-Status zurückWas ist vtable??
Der beanstandete Code sieht so aus (ich weiss nicht genau, ob das so geht, wie ich es mir dachte, aber das ist ein anderes Problem):
class CFlaeche : public CObject { public: //Konstruktoren CFlaeche(); CFlaeche (std::vector<std::vector<Vec3d> > polList) { //in dieser Zeile wird der Fehler bemängelt int size; size = polList.size(); AllThePolygons.reserve(size); AllThePolygons = polList; } private: // store all the Polygons std::vector<std::vector<Vec3d> > AllThePolygons; }; //usf.Der Aufruf im Programm sieht folgendermassen aus:
g_obList.push_back(new CFlaeche(v_Liste));v_Liste:
std::vector<std::vector<Vec3d> > v_liste;und g_obList nimmt Objekte vom Typ CObject auf, was die Basisklasse von CFlaeche ist.
Was ist diese vtable für CFlaeche jetzt und wie verhindere ich diesen Fehler? Danke für alle Tipps!

-
CFlaeche ist von CObjekt abgeleitet, vermutlich beinhaltet CObjekt virtuelle Funktionen, die Du in CFlaeche nicht implementiert hast.
-
nicht rein virtuelle funktione wärn egal.. solange ses kein abstrakten(rein virtuelle) sind.
@Olga .
aba an die möglcihkeit is bei ner klasse "Object" warscheinlicch.undefined reference to `vtable for CFlaeche'
bedeutet dass es so ist (s.o.)
vatable ist die tabelle der virtuellen (rein undnicht rein) funktionen