2011-01-01 6 views
5

sto usando la funzione template:uint8_t e unsigned char collega errore

template<typename T> void func(const T& value) 
{ 
    obj->func(value); 
} 

dove obj è oggetto della classe:

void my_object::func(int64_t value) { ... } 
void my_object::func(uint64_t value) { ... } 
void my_object::func(uint32_t value) { ... } 
void my_object::func(uint16_t value) { ... } 
void my_object::func(uint8_t value) { ... } 

Il problema è con uint8_t sovraccarico my_object :: func() override. Linker si lamenta di simboli esterni non risolti per sovraccarichi, che devono hanno il parametro senza segno char.

Devo sostituire uint8_t sovraccarico con unsigned char sovraccarico?

Edit: Proprio ora notato, che linker lamenta uint64_t e int64_t troppo.

Compilare su Windows utilizzando MSVC++ 2008 Express.

Edit: Scuse, ho dichiaratomy_object :: func (valore uint8_t) funzione (e altro), ma non definiti esso.

+0

Per inciso, qual è il tuo compilatore? –

+0

MSVC++ 2008 Express – mnn

+1

Qual è il messaggio di errore ** esatto ** che stai ottenendo? –

risposta

0

Suppongo che uint8_t sia stato typedef ed unsigned char, quindi perché lo stai vedendo.

+0

Guardando la fonte, no. uint8_t è typedef per UINT8. – mnn

+0

hm .. Non sono sicuro che 'uint8_t' appartenga a' stdint.h' il cui scopo è quello di astrarre i tipi primitivi che potrebbero a loro volta essere diversi nelle diverse piattaforme. – Muggen

+0

La libreria con cui sto lavorando include il file, che distingue tra gli ambienti di compilazione. Se è Windows, definisce manualmente tutti i tipi int, se Linux include stdint.h e inttypes.h – mnn

8

Questo è il file include dovrebbe #include per utilizzare i suddetti tipi (raccomandazioni C99)

#include <stdint.h>

+1

In che modo ciò porta a errori * linking *? –

+0

No, sto costruendo su Windows. – mnn

+0

Porta a errori * link * perché l'inclusione di '# include' non sarà convertita prima della compilazione tramite le dichiarazioni' typedef' tutto l'int32 ... In altri termini, durante la compilazione tutti i tipi speciali sopra menzionati non esistono più - quindi non sono presenti durante * linking * neanche. –