我有一个具有以下构造函数的类:
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);
Run Code Online (Sandbox Code Playgroud)
如果我这样称呼它:
Color c{ 0.0f, 1.0f, 0.0f, 1.0f };
Run Code Online (Sandbox Code Playgroud)
一切都好。但如果我这样称呼它:
Color c{ 78, 180, 84, 255 };
Run Code Online (Sandbox Code Playgroud)
或者
Color c{ 0xffffffff };
Run Code Online (Sandbox Code Playgroud)
我收到
错误 C2668:“Color::Color”:对重载函数的不明确调用
为什么?如何使其正确选择?
Color c{ 0.0f, 1.0f, 0.0f, 1.0f };是明确的,编译器可以选择采用浮点参数的构造函数。
对于Color c{ 78, 180, 84, 255 };,文字实际上是有符号类型。所以编译器必须转换文字。它有两个选择,但不知道该选哪一个。
如果你这样写,尽管很乏味,Color c{static_cast<unsigned char>(78), static_cast<unsigned char>(180), static_cast<unsigned char>(84), static_cast<unsigned char>(255) };那么带有参数的构造const unsigned char函数就会被自动调用。
同样,使用 时Color c{ 0xffffffff };,数字又是带符号的十六进制文字。所以编译器不知道该使用哪一个。
| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |