Szablon + unresolved external symbol
Ostatnio zmodyfikowano 2012-01-08 21:20
TheSnake Temat założony przez niniejszego użytkownika |
Szablon + unresolved external symbol » 2012-01-07 21:16:09 Witam, chciałbym użyć szablonów w swoim programie więc piszę w klasie deklaracje:
template < typename t > t ReadMemory2( DWORD address );
i definicję:
template < typename t > t ReadMemory2( DWORD address ) { address = baseAddress + address; t ret; ReadProcessMemory( handle,( LPCVOID ) address, & ret, sizeof( t ), NULL ); return ret; }
Niestety linker(?!) wywala mi błąd:
error LNK2019: unresolved external symbol "public: char * __thiscall Controll::ReadMemory2<char *>(unsigned long)" (??$ReadMemory2@D@Controll@@QAEDK@Z) referenced in function "public: __thiscall MainWindow::MainWindow(void)" (??0MainWindow@@QAE@XZ) |
Gdy próbuję wywołać funkcję:
Ctrl->ReadMemory2 < char *>( 0x43AE84 )
Dodam, że gdy nie ma tego szablonu w kodzie to kompiluje się normalnie. Gdy użyję zwykłej funkcji, która zwraca "char *" statycznie to działa. Używam VC2010.
Spotkał się ktoś z czymś takim?
Pozdrawiam.
@edit, doczytałem, że template powinien być w pliku nagłówkowym (całe ciało funkcji), tak też zrobiłem lecz nic się nie zmieniło. |
|
DejaVu |
» 2012-01-07 23:09:17 #include <windows.h>
class X { public: template < typename t > t ReadMemory2( DWORD address ) { address = baseAddress + address; t ret; ReadProcessMemory( handle,( LPCVOID ) address, & ret, sizeof( t ), NULL ); return ret; } private: int baseAddress; HANDLE handle; };
int main() { X x; x.ReadMemory2 < char *>( 0x43AE84 ); return 0; }
Hm? |
|
TheSnake Temat założony przez niniejszego użytkownika |
» 2012-01-08 03:36:39 Dokładnie mam taką klasę (oczywiście, handle itp. pobieram). Przy statycznej funkcji zwracającej chara działa, a z szablonem nie chce. Przepisałem aplikację na wxWidgets i teraz przy tej funkcji wywala wyjątek "Access violation" w pliku strconv.cpp w liniach: const size_t len =::MultiByteToWideChar ( m_CodePage, flags, psz, - 1, buf, buf ? n: 0 ); Z intem działa normalnie. |
|
DejaVu |
» 2012-01-08 13:26:44 Access violation - naruszenie ochrony pamięci. W czym problem? System zachował się poprawnie, a ponadto aplikacja się skompilowała. |
|
TheSnake Temat założony przez niniejszego użytkownika |
» 2012-01-08 21:20:51 Faktycznie, okazało się, że tam miałem inny adres ;) Dzięki. |
|
« 1 » |