如何在C++中解决这两者之间的歧义调用?
Color(int, int, int)
Color(float, float, float)当值是硬编码的(即Color(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发布于 2010-10-12 04:12:40
问题似乎是你已经声明了
Color(unsigned, unsigned, unsigned);
Color(float, float, float);也就是说,所有三个参数都必须是float或unsigned。如果您尝试用其他类型(如int或double)调用它,它是不明确的--编译器不知道您想要哪种类型,因为这两种类型都是好的(如果您愿意,也可以是坏的)。你可以通过声明更多的重载来改进一下:
Color(int, int, int);
Color(double, double, double);但是如果你尝试用混合类型来调用它,你仍然会得到歧义错误。
发布于 2010-10-12 04:17:19
浮点文本的类型是double,而不是float。通常,您应该使用double,除非您有使用float的特定原因,例如需要消耗较少的内存。正如其他答案所提到的,你似乎已经宣布:
Color(unsigned int, unsigned int, unsigned int);
Color(float, float, float);这意味着调用例如Color(int, int, int)具有两种可能的转换,这两种转换都不是优选的。您可以通过声明以下语句来修复此问题:
Color(int, int, int);
Color(double, double, double);而是在类本身中执行所需的任何转换,或者调用构造函数,如下所示:
Color((unsigned int)r, (unsigned int)g, (unsigned int)b);发布于 2010-10-12 03:53:25
这取决于语言,但如果您使用的是C#或C++,则可能会对它们进行强制转换。
例如,对于C#:
Color((int)r, (int)g, (int)b)
或
Color((float)r, (float)g, (float)b)
https://stackoverflow.com/questions/3909406
复制相似问题