Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] undefined reference to vtable for... przy kompilacji klasy pochodnej Drawable i Transformable

Ostatnio zmodyfikowano 2014-08-01 08:57
Autor Wiadomość
kubawal
Temat założony przez niniejszego użytkownika
[SFML] undefined reference to vtable for... przy kompilacji klasy pochodnej Drawable i Transformable
» 2014-07-31 13:59:16
Mam klasę która ma być 'czymś co łączy abstrakcyjną definicję kształtu z oknem', czyli po prostu wyświetla kształt zapisany w innej klasie.
Jednak pojawia się dziwny problem: w logu wyświetla mi się

debug/main.o: In function `ZN2ll6render12ShapeDisplayC1EPNS_4core6shapes5ShapeEN2sf5ColorES7_':
C:\...\Programy\qt\build-llTest-Desktop_Qt_5_1_1_MinGW_32bit-Debug/../Llib/shapedisplay.h:37: undefined reference to `vtable for ll::render::ShapeDisplay'
C:\Kuba(D)\Programy\qt\build-llTest-Desktop_Qt_5_1_1_MinGW_32bit-Debug/../Llib/shapedisplay.h:37: undefined reference to `vtable for ll::render::ShapeDisplay'
debug/main.o: In function `ZN2ll6render12ShapeDisplayD1Ev':
C:\...\Programy\qt\build-llTest-Desktop_Qt_5_1_1_MinGW_32bit-Debug/../Llib/shapedisplay.h:25: undefined reference to `vtable for ll::render::ShapeDisplay'
C:\...\Programy\qt\build-llTest-Desktop_Qt_5_1_1_MinGW_32bit-Debug/../Llib/shapedisplay.h:25: undefined reference to `vtable for ll::render::ShapeDisplay'
collect2.exe: error: ld returned 1 exit status
Co dziwniejsze, kod ten jest w dll'ce, a podczas kompilacji dll'ki kompilator nie ma żadnych zastrzeżeń.

C/C++
class ShapeDisplay
    : public Drawable
     , public Transformable
{
    core::shapes::Shape * sh;
    Color fillColor, borderColor;
    mutable core::FloatRect aabb;
    mutable Transform old;
   
    void updateAABB() const;
   
public:
    ShapeDisplay()
        : sh( NULL )
         , fillColor( Color::Transparent )
         , borderColor( Color::Black )
    { }
    ShapeDisplay( core::shapes::Shape * sh, Color fillColor = Color::Transparent, Color borderColor = Color::Black )
        : sh( sh )
         , fillColor( fillColor )
         , borderColor( borderColor )
    { }
    virtual ~ShapeDisplay() { }
   
    void setShape( core::shapes::Shape * newsh ) { sh = newsh; }
    void setFillColor( Color c ) { assert( sh ); fillColor = c; }
    void setBorderColor( Color c ) { assert( sh ); borderColor = c; }
   
    core::FloatRect getGlobalBounds() const { if( !compareArray( getTransform().getMatrix(), old.getMatrix(), 4 * 4 ) )
        { old = getTransform(); updateAABB(); } return aabb; }
    const core::shapes::Shape * getShape() const { return sh; }
    Color getFillColor() const { return fillColor; }
    Color getBorderColor() const { return borderColor; }
   
    virtual void draw( RenderTarget & target, RenderStates states ) const;
};

//...

void ShapeDisplay::updateAABB() const
{
    //...
}

void ShapeDisplay::draw( RenderTarget & target, RenderStates states ) const
{
    //...
}
P-114735
unkn9wn
» 2014-07-31 14:29:45
spróbuj skomentować destruktor

C/C++
//virtual ~ShapeDisplay() { }


# ahh rada na nic, kiedyś miałem z tym problem, lecz u Ciebie to nie tu pewnie
P-114737
Wrzud
» 2014-07-31 14:37:00
Jak eksportujesz i importujesz klase?
P-114738
kubawal
Temat założony przez niniejszego użytkownika
» 2014-08-01 08:57:29
Faktycznie, zabrakło declspec'a.
P-114823
« 1 »
  Strona 1 z 1