我有一套(潜在的重载)功能:
write(uint16_t index, uint16_t subindex, uint8_t data)
write(uint16_t index, uint16_t subindex, uint16_t data)
write(uint16_t index, uint16_t subindex, uint32_t data)
write(uint16_t index, uint16_t subindex, float data)
尽管当我将鼠标悬停在typedef unsigned short int uint16_t;
上时eclipse显示我uint16_t
,但我得到了错误:
call of overloaded ‘`write(int, int, int)`’ is ambiguous
在函数内部我必须知道,如果数据是uint8_t
,uint16_t
等,
我该怎么办?
还有另一种方式,例如
write(uint16_t index, uint16_t subindex, int data, enum type)
?
答案 0 :(得分:3)
调用不明确,因为编译器不知道您要调用哪个版本的函数。例如,使用方式如下:
write(1, 2, 3);
什么是3
?可以是uint8_t
或uint16_t
或其他人......
编译器告诉你它无法知道,而不是猜测,并可能做一些疯狂的事情。您可以通过以下几种方式解决此问题:
writeUInt8t(... , uint8_t in)
write(1, 2, static_cast<uint8_t>(3))