Linkerfehler -> wie kann ich ihn beheben
-
Hi,
ich habe folgendes Problem:
Wenn ich mein Programm(die exe.-Datei) erstelle, kommt beim Linken immer folgender Fehler:Linker-Vorgang läuft...
Model2.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall Vector::transform(class Matrix const &)" (?transform@Vector@@QAEXABVMatrix@@@Z)Debug/Opengl_9.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.Opengl_9.exe - 2 Fehler, 0 Warnung(en)
///////////////////////////////////////////////////
Der Quellcodeausschnitt um den es sich handelt sieht so aus:
//vector.hxx #ifndef PORTALIB3D_VECTOR_HXX #define PORTALIB3D_VECTOR_HXX #include "Matrix.h" class Vector { public: /* Constructor. (0, 0, 0, 1) */ Vector(); /* Constructor. 3 float values. */ Vector( const float *vector ); /* Destructor. */ ~Vector(); //..... const float *getVector() const { return m_vector; } void transform( const Matrix& m ); //Hat mit Fehlermeldung zu tun //...... #endif // ndef PORTALIB3D_VECTOR_HXX //////////////////////////////////////////////////////////////////////
//Model2.cpp #include vector.hxx //.... const Matrix& final = m_pJoints[ m_pVertices[ index ].m_boneID ].m_final; glTexCoord2f( pTri->m_s[ k ], pTri->m_t[ k ] ); Vector newNormal( pTri->m_vertexNormals[ k ] ); newNormal.normalize(); glNormal3fv( newNormal.getVector() ); Vector newVertex( m_pVertices[ index ].m_location ); newVertex.transform( final ); //hier!!!!!!!!!!!!!! glVertex3fv( newVertex.getVector() ); //..... //////////////////////////////////////////////////////////////////////
Weiß einer von euch, wie man diesen Fehler beheben kann?
Gruß Crabbe
-
Wo wird denn die Funktion transform definiert?
-
der fehler heißt nämlich nichts anderes als dass der linker transform aufrufen will, aber nicht kann, weil transform garnicht definiert ist!
geloescht
-
Wird transform nicht in der Klasse Vector() definiert?
void transform( const Matrix& m );
Gruß Crabbe
-
Wird transform nicht in der Klasse Vector() definiert?
In dem Code, den du uns zeigst wird transform deklariert, aber nie definiert.
-
Nein, die wird nur deklariert.
void transform( const Matrix& m ){};
Die {} sind entscheidend.....
-
Entweder du schreibst in der Zur Klasse gehörenden Quelldatei
void Vector::transform(const Matrix& m) { //tu hier irgendwas }
oder du machst es als inline Methode:
class Vector { //Deine ganzen anderen sachen... void transform(const Matrix& m) { //tu hier was } };
ich hoffe ich hab keine fehler gemacht
geloescht
-
Vielen Dank, jetzt erscheint kein Fehler mehr!
Gruß Crabbe