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


Anmelden zum Antworten