c – Color(int,int,int)vs Color(float,float,float)模糊调用

如何在C中解决这两者之间的模糊呼叫?

Color(int, int, int)
Color(float, float, float)

当值被硬编码即颜色(1,2,3)和它们是变量Color(r,g,b)时,它都是模糊的.为什么编译器不会根据数据类型解析?变量形式?

编辑:
对不起,太多的C让我忘记了还有其他语言.
并没有太多的“完整代码”就是这样.

float x, y, z;
int r, g, b;
Color(1, 2, 3); // ambiguous
Color(1.0, 2.0, 3.0); // ambiguous
Color(r, g, b); // ambiguous  <--- this one is a real pain
Color((int)r, (int)g, (int)b); // ambiguous
Color(x, y, z); //OK
Color(1u, 2u, 3u); //OK
Color(1.0f, 2.0f, 3.0f); //OK

解决方法:

问题似乎是你已经宣布了

Color(unsigned, unsigned, unsigned);
Color(float, float, float);

即,所有三个args必须是float或unsigned.如果你试图用其他类型(例如int或double)调用它,它的含糊不清 – 编译器不知道你想要哪个,因为两者都只是一个好的(如果你愿意,也可以是坏的).您可以通过声明更多重载来改进一些事情:

Color(int, int, int);
Color(double, double, double);

但如果尝试用混合类型调用它,你仍会遇到模糊错误.

上一篇:Exchange Server 中间人劫持 RCE 漏洞分析


下一篇:Ambiguous mapping. Cannot map 'appController' method