Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译器如何选择正确的重载函数?_C++_Overloading - Fatal编程技术网

C++ 编译器如何选择正确的重载函数?

C++ 编译器如何选择正确的重载函数?,c++,overloading,C++,Overloading,我有一个包含以下构造函数的类: Color(const float red = 0.0f, const float green = 0.0f, const float blue = 0.0f, const float alpha = 1.0f); Color(const unsigned char red, const unsigned char green, const unsigned char blue, const unsigned char alpha); Color(const un

我有一个包含以下构造函数的类:

Color(const float red = 0.0f, const float green = 0.0f, const float blue = 0.0f, const float alpha = 1.0f);
Color(const unsigned char red, const unsigned char green, const unsigned char blue, const unsigned char alpha);
Color(const unsigned long int color);
如果我这样称呼它:

Color c{ 0.0f, 1.0f, 0.0f, 1.0f };
一切都好。但如果我称之为:

Color c{ 78, 180, 84, 255 };

我收到

错误C2668:“颜色::颜色”:对重载函数的调用不明确


为什么??如何使其正确选择?

颜色c{0.0f,1.0f,0.0f,1.0f}是明确的,编译器可以选择接受浮点参数的构造函数

颜色c{78,180,84,255},文本实际上是有符号的类型。因此编译器必须转换文本。它有两个选择,不知道该选哪一个

如果你写过,虽然很乏味,
Color c{static_cast(78)、static_cast(180)、static_cast(84)、static_cast(255)}
则会自动调用采用
常量unsigned char
参数的构造函数


同样,使用
颜色c{0xffffffff},该数字再次是有符号十六进制文字。因此编译器不知道使用哪种颜色。

类似于带有
颜色c{78U,180U,84U,255U}的不幸的是我也有同样的错误。78U不是
无符号字符
文字。完全正确!它是一个无符号整数。非常感谢。
Color c{ 0xffffffff };