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)` 

A ответ: Шаблоны должны быть определены в заголовке .. (@Shaggi)

+1

Поместите определение в файл заголовка (для этого нужны шаблоны) – Shaggi

+0

Вы используете [зарезервированный идентификатор] (http://stackoverflow.com/questions/228783/what-are-the-rules-about-using- ан-подчеркивание-в-ас-идентификатор). – chris

+0

Спасибо @Shaggi, это был правильный ответ. Но это действительно глупо. Моя функция нуждается в другой функции из файла заголовка (который не использует шаблон), но мне нужно было определить это тоже в заголовке. Поэтому, если я использую шаблоны, я должен забыть заголовки почти. – Iburidu

ответ

0

Шаблон функции

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

не определен. Включите его определение в файле заголовка (memaddr.h):

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

Шаблон функция инстанциируемый раз когда вы используете его.

+0

будьте более конкретным, шаблон встроен в C++ http://www.cplusplus.com/doc/tutorial/templates/ – Iburidu

+0

отредактирован и расширен. Посмотрите, ответит ли это вам. –

Смежные вопросы