Problem mit Klasse



  • #ifndef XFORM_H
    #define XFORM_H
    
    namespace sg
    {
    
    class XForm
    {
    protected:
        float array[16];
    public:
        XForm();
        virtual ~XForm();
    };
    
    }
    #endif // XFORM_H
    

    die headerdatei

    #include "xform.h"
    
    // PUBLIC IDENTITY
    
    sg::XForm::XForm()
    {
        for(int i=0; i< 16; i++)
        {
            array[i] = 0;
            if(i % 5 == 0)
            {
                array[i] = 1;
            }
        }
    }
    

    Ergebnis:

    undefined reference to `vtable for sg::XForm'
     ld returned -1
    

    ich hatte schonmal so ein ähnliches probel, welches aber ganz schnell gelöst war aber keine ahnung mehr wie...

    was mach ich falsch?


  • Mod

    Heißer Tipp: Google kann bei obskuren Fehlermeldungen sehr gut helfen, so auch bei dieser:

    http://gcc.gnu.org/faq.html#vtables



  • shisha schrieb:

    Ergebnis:

    undefined reference to `vtable for sg::XForm'
     ld returned -1
    

    Du hast den virtuellen Destruktor nur deklariert aber nicht definiert. Du kannst den Destruktor auch abstrakt ("pur virtuell") machen, brauchst aber immer noch eine Definition. Das ist bei Destruktoren nunmal so.

    class abstrakt
    {
    public:
      virtual int mach_etwas_1() const = 0;  // <-- pur virtuell
      virtual void mach_etwas_2() = 0;       // <-- pur virtuell
      virtual ~abstrakt() {}                 // <-- virtuell + Inline-DEFINition
    };
    

    Du kannst auch etwas mehr über Dein Design verraten. Das lässt sich eventuell verbessern.


Anmelden zum Antworten