2013-10-13 4 views
0

내가 성공하지 :(C++ 함수 정의 오류 (매개 변수 전달)

내 memaddr.h 내 템플릿 함수를 호출하기 위해 노력하고있어 :

#ifndef __MEM_ADDR_WRITER__ 
#define __MEM_ADDR_WRITER__ 

#include <windows.h> 
#include <tlhelp32.h> 
#include <stdio.h> 

namespace MemAddr { 

    template <typename WRITABLE> 
    int WriteMemoryAddress(const char* process, unsigned long address, WRITABLE value); 

} 

#endif 

호출 :

byte value = 0xEB; 
MemAddr::WriteMemoryAddress("jamp.exe", 0x004392D2, value); 

오류 메시지 :

undefined reference to `int MemAddr::WriteMemoryAddress<unsigned char>(char const*, unsigned long, unsigned char)` 

nswer : 템플릿 (@Shaggi)

+1

헤더 파일에 정의 넣기 (템플릿에 필요함) – Shaggi

+0

[예약 된 식별자] (http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-) an-under-in-ac-identifier)를 사용합니다. – chris

+0

감사합니다 @Shaggi, 이것이 올바른 대답이었습니다. 그러나 그것은 정말로 어리 석다. 내 함수는 (템플릿을 사용하지 않는) 헤더 파일에서 다른 함수를 필요로하지만 헤더에 정의해야한다. 그래서 템플릿을 사용하는 경우 헤더를 거의 잊어 버려야합니다. – Iburidu

답변

0

함수 서식

template <typename WRITABLE> 
int WriteMemoryAddress(const char* process, unsigned long address, WRITABLE value); 

가 정의되지 .. 헤더에 정의 될 필요가있다. 당신이 그것을 사용할 때 함수 템플릿이 일단 을 인스턴스화됩니다

template <typename WRITABLE> 
int WriteMemoryAddress(const char* process, unsigned long address, WRITABLE value) 
{ 
    /* do something */ 
} 

: 헤더 파일 (memaddr.h)의 정의를 포함합니다.

+0

구체적으로 말하자면, 템플릿은 C++에 내장되어 있습니다. http://www.cplusplus.com/doc/tutorial/templates/ – Iburidu

+0

편집 및 확장되었습니다. 이 답변을 참조하십시오. –