我正在使用模板功能:
template<typename T> void func(const T& value)
{
obj->func(value);
}
其中obj是类的对象:
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) { ... }
问题出在 my_object :: func()覆盖的 uint8_t 重载。链接器抱怨未解决的重载外部符号,应该 unsigned char 参数。
我应该用 unsigned char 重载替换 uint8_t 重载吗?
编辑:刚才注意到,该链接器也抱怨 uint64_t 和 int64_t 。
我使用 MSVC ++ 2008 Express 在Windows上编译。
编辑:道歉,我宣布 my_object :: func(uint8_t value)函数(和其他),但我没有定义它
答案 0 :(得分:8)
include
文件应该#include使用上述类型(C99推荐)
#include&lt; stdint.h&gt;
答案 1 :(得分:0)
我猜测uint8_t
typedef
已被unsigned char
编辑为{{1}},因此您会看到这一点。
答案 2 :(得分:0)
尝试使用
进行编译template void my_object::func(int64_t value) { ... }
template void my_object::func(uint64_t value) { ... }
template void my_object::func(uint32_t value) { ... }
template void my_object::func(uint16_t value) { ... }
template void my_object::func(uint8_t value) { ... }
通过类似的问题解决了我的问题