首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Color(int,int,int) vs Color(float,float,float)歧义调用

Color(int,int,int) vs Color(float,float,float)歧义调用
EN

Stack Overflow用户
提问于 2010-10-12 03:42:50
回答 4查看 2.9K关注 0票数 3

如何在C++中解决这两者之间的歧义调用?

代码语言:javascript
复制
Color(int, int, int)
Color(float, float, float)

当值是硬编码的(即Color(1, 2, 3) )时,以及当它们是变量Color(r, g, b)时,这都是不明确的。为什么编译器不能根据数据类型进行解析?以可变的形式?

编辑:对不起,太多的C++会让我忘记还有其他的语言。而且并没有太多关于它的“完整代码”。

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-12 04:12:40

问题似乎是你已经声明了

代码语言:javascript
复制
Color(unsigned, unsigned, unsigned);
Color(float, float, float);

也就是说,所有三个参数都必须是floatunsigned。如果您尝试用其他类型(如intdouble)调用它,它是不明确的--编译器不知道您想要哪种类型,因为这两种类型都是好的(如果您愿意,也可以是坏的)。你可以通过声明更多的重载来改进一下:

代码语言:javascript
复制
Color(int, int, int);
Color(double, double, double);

但是如果你尝试用混合类型来调用它,你仍然会得到歧义错误。

票数 8
EN

Stack Overflow用户

发布于 2010-10-12 04:17:19

浮点文本的类型是double,而不是float。通常,您应该使用double,除非您有使用float的特定原因,例如需要消耗较少的内存。正如其他答案所提到的,你似乎已经宣布:

代码语言:javascript
复制
Color(unsigned int, unsigned int, unsigned int);
Color(float, float, float);

这意味着调用例如Color(int, int, int)具有两种可能的转换,这两种转换都不是优选的。您可以通过声明以下语句来修复此问题:

代码语言:javascript
复制
Color(int, int, int);
Color(double, double, double);

而是在类本身中执行所需的任何转换,或者调用构造函数,如下所示:

代码语言:javascript
复制
Color((unsigned int)r, (unsigned int)g, (unsigned int)b);
票数 1
EN

Stack Overflow用户

发布于 2010-10-12 03:53:25

这取决于语言,但如果您使用的是C#或C++,则可能会对它们进行强制转换。

例如,对于C#:

Color((int)r, (int)g, (int)b)

Color((float)r, (float)g, (float)b)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3909406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档