Szablony klas - unresolved external symbol
Ostatnio zmodyfikowano 2011-05-03 22:26
kamillo121 Temat założony przez niniejszego użytkownika |
Szablony klas - unresolved external symbol » 2011-05-03 21:40:39 Witam, piszę w mvc++ 2008 pewien projekt i pewien błąd nie daje mi spokoju: main.obj : error LNK2019: unresolved external symbol "public: __thiscall QT_Node<struct Foo>::~QT_Node<struct Foo>(void)" (??1?$QT_Node@UFoo@@@@QAE@XZ) referenced in function _SDL_main main.obj : error LNK2019: unresolved external symbol "public: __thiscall QT_Node<struct Foo>::QT_Node<struct Foo>(void)" (??0?$QT_Node@UFoo@@@@QAE@XZ) referenced in function _SDL_main
Kod: struct Foo { int a; Foo( int ac ) { a = ac; } bool compare( Foo * a ) { return true; } };
template < class T > class QT_Node { QT_Node < T >* nodes[ 4 ]; T ** data; int data_size; public: QT_Node( T * ); QT_Node(); ~QT_Node(); void addData( T * ); };
template < class T > QT_Node < T >::QT_Node( T * dat ) { data = 0; data_size = 0; if( dat ) { data =( T ** ) malloc( sizeof( T * ) ); data[ data_size ] = dat; data_size++; } nodes[ 0 ] = 0; nodes[ 1 ] = 0; nodes[ 2 ] = 0; nodes[ 3 ] = 0; }
template < class T > QT_Node < T >::QT_Node() { data = 0; data_size = 0; nodes[ 0 ] = 0; nodes[ 1 ] = 0; nodes[ 2 ] = 0; nodes[ 3 ] = 0; }
template < class T > QT_Node < T >::~QT_Node() { if( data ) { for( int i = 0; i < data_size; i++ ) { if( data[ i ] ) delete data[ i ]; } delete[] data; } if( nodes[ 0 ] ) delete nodes[ 0 ]; if( nodes[ 1 ] ) delete nodes[ 1 ]; if( nodes[ 2 ] ) delete nodes[ 2 ]; if( nodes[ 3 ] ) delete nodes[ 3 ]; }
template < class T > void QT_Node < T >::addData( T * dat ) { data_size++; if( !data ) { data =( T ** ) malloc( sizeof( T * ) ); data[ 0 ] = dat; } else { data =( T ** ) malloc( data_size * sizeof( T * ) ); data[ data_size - 1 ] = dat; } }
Błąd podany na samym początku występuje wtedy gdy stworze QT_Node w ten sposób: Proszę o pomoc Was rodaków... Coś mi się wydaję, że to nie z kodem jest coś nie tak tylko z dołączaniem plików bo jak w nagłówku dodam ciało metod konstruktora i destruktora a z cpp usunę to działa tylko o co tu chodzi ? |
|
DejaVu |
» 2011-05-03 22:20:39 Szablony mogą być tylko i wyłącznie w pliku nagłówkowym (*.h / *.hpp). Szablony nie są kompilowalne do postaci binarnej, więc nie wylądują w żadnej bibliotece. |
|
kamillo121 Temat założony przez niniejszego użytkownika |
» 2011-05-03 22:26:27 O tym nawet nie pomyślałem. Wszystko muszę w nagłówku wsadzić w takim razie albo struktury voidem przerzucać i pozbyć się template.
Dzięki. |
|
« 1 » |