uint8_t 和 unsigned char 链接错误
Posted
技术标签:
【中文标题】uint8_t 和 unsigned char 链接错误【英文标题】:uint8_t and unsigned char linking error 【发布时间】:2011-06-02 06:00:45 【问题描述】:我正在使用模板函数:
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 参数。
我应该将 uint8_t 重载替换为 unsigned char 重载吗?
编辑:刚才注意到,链接器也抱怨 uint64_t 和 int64_t。
我在 Windows 上使用 MSVC++ 2008 Express 进行编译。
编辑:抱歉,我声明 my_object::func(uint8_t value) 函数(和其他),但我没有定义它。
【问题讨论】:
顺便问一下,你的编译器是什么? 您收到的确切错误消息是什么? 您应该尝试缩小问题范围,并提供更多关于您实际在做什么的细节。真的是因为模板 - 如果您直接调用 obj::func() 会发生什么?你如何定义你的类,以及你在哪里以及如何实现它的?仅凭您提供的描述,人们就不得不猜测实际发生了什么。 确保使用相同的标头和这些整数类型的 typedef。 MSVC 在解析等价类型方面存在缺陷。在某些情况下,两种类型的 C++ 相同,但 MSVC 对它们有不同的内部类型。这些内部类型使其进入链接器,因此不匹配。 【参考方案1】:尝试用
编译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) ...
用类似的问题解决了我的问题
【讨论】:
【参考方案2】:这是include
文件应该#include 以使用上述类型(C99 建议)
#include
【讨论】:
它会导致 link 错误,因为在通过typedef
声明所有 int32... ,在编译期间,所有上述特殊类型都不再存在 - 因此它们在 linking 期间也不存在。
stdint.h
被包含在 C99 中以帮助程序可移植性。它也可以在 Windows 上使用。见en.wikipedia.org/wiki/Stdint.h
对于 C++ 程序来说真的应该是 #include 我猜uint8_t
已经被typedef
编辑为unsigned char
,这就是为什么你会看到它。
【讨论】:
看源码,没有。 uint8_t 是 UINT8 的 typedef。 hm.. 我不确定,但uint8_t
属于 stdint.h
,其目的是从原始类型中抽象出来,而原始类型又可能在不同平台上有所不同。
我正在使用的库包含包含文件,用于区分构建环境。如果是 windows,它会手动定义所有 int 类型,如果是 Linux,它包括 stdint.h 和 inttypes.h以上是关于uint8_t 和 unsigned char 链接错误的主要内容,如果未能解决你的问题,请参考以下文章
uint8_t uint32_t 类型强制转换出错 以及 unsigned char 类型和 unsigned int 类型相互转化
错误:从“uint8_t* aka unsigned char*”转换为“unsigned int”会丢失精度 [-fpermissive]
将 unsigned char 数组转换为 uint8_t 数组?
React Native Build Error on IOS - typedef用不同类型重新定义('uint8_t'(又名'unsigned char')与'enum clockid_t')
react-native 无法构建 ios:(错误 xcode Flipper)Typedef 重新定义不同类型('uint8_t'(又名'unsigned char')与'enum clockid_