[SFML] 'undefined reference' do funkcji wirtualnych i WinMain
Ostatnio zmodyfikowano 2014-01-17 19:10
kubawal Temat założony przez niniejszego użytkownika |
[SFML] 'undefined reference' do funkcji wirtualnych i WinMain » 2014-01-17 18:40:37 Witam! Piszą sobie obiektowego frameworka mocno wykorzystującego obiektowość, i przy linkowaniu wyskakują 'undefined reference' do funkcji wirtualnych i WinMain'a. class Object { virtual b2Shape * createB2Shape( const ObjectDef * def ) = 0; virtual void * createSFObj( const ObjectDef * def ) = 0; };
Object::Object( ) { b2FixtureDef fixDef; fixDef.shape = createB2Shape( def ); objSF = createSFObj( def ); }
class ShapeObject : public Object { virtual b2Shape * createB2Shape( const ObjectDef * def ) = 0; virtual void * createSFObj( const ObjectDef * def ) { return createDrawableShape(( const ShapeObjectDef * ) def ); } virtual Shape * createDrawableShape( const ShapeObjectDef * def ) = 0; };
class RectangleObject : public ShapeObject { virtual Shape * createDrawableShape( const ShapeObjectDef * def ); virtual b2Shape * createB2Shape( const ObjectDef * def ); };
Błędy(tylko linkowanie): debug/Object.o: In function `ZN2kp6ObjectC2EPNS_8GameBaseEPNS_9ObjectDefENS0_4TypeE': C:\Kuba(D)\Programy\qt\build-Box2d-test1-Desktop_Qt_5_1_1_MinGW_32bit-Debug/../Box2d-Test1/Object.cpp:17: undefined reference to `kp::Object::createB2Shape(kp::ObjectDef const*)' C:\Kuba(D)\Programy\qt\build-Box2d-test1-Desktop_Qt_5_1_1_MinGW_32bit-Debug/../Box2d-Test1/Object.cpp:26: undefined reference to `kp::Object::createSFObj(kp::ObjectDef const*)' c:/biblioteki/qt-5.1.1/tools/mingw48_32/bin/../lib/gcc/i686-w64-mingw32/4.8.0/../../../../i686-w64-mingw32/lib/../lib/libmingw32.a(lib32_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x39): undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status
Zauważcie, że nie znajduje także WinMain(), chociaż dołączyłem -lsfml-main-d.Polecenia kompilatora(tylko linkowanie): g++ -Wl,-subsystem,console -mthreads -o debug\Box2d-Test1.exe debug/ShapeObject.o debug/RectangleObject.o debug/Object.o debug/GameBase.o debug/main.o -luser32 -LC:\Biblioteki\SFML-src\build\lib -lsfml-audio-d -lsfml-graphics-d -lsfml-main-d -lsfml-network-d -lsfml-window-d -lsfml-system-d -LC:\Biblioteki\box2d-2.3\qt-build\Box2D -lBox2d
PS: Moje środowisko: MinGW 4.8 SFML 2.1 src-build |
|
Monika90 |
» 2014-01-17 18:53:18 fixDef.shape = createB2Shape( def );
Wewnatrz konstruktorów mechanizm f. wirtualnych nie działa, tzn. wywołana będzie wersja z klasy Object która nie jet zdefiniowana. |
|
kubawal Temat założony przez niniejszego użytkownika |
» 2014-01-17 18:56:14 Czyli muszę napisać funkcję inicjalizującą w klasie Object, która musi być wywoływana na końcu konstruktora każdej klasy dziedziczącej? |
|
kubawal Temat założony przez niniejszego użytkownika |
» 2014-01-17 19:10:24 Działa. Tylko co z tym undefined reference'm do WinMain()'a? |
|
« 1 » |