dev c++ 运行报错 [Error] call of overloaded \'setValue(double)\' is ambiguous
作者:野牛程序员:2023-04-17 12:11:53C++程序设计阅读 2730
#include <iostream>
using namespace std;
union myUnion {
int a;
float b;
void setValue(int x) {
a = x;
}
void setValue(float x) {
b = x;
}
void printValue() {
cout << "a = " << a << ", b = " << b << endl;
}
};
int main() {
myUnion u;
u.setValue(123);
u.printValue(); // 输出 a = 123, b = 1.4013e-45
u.setValue(3.14);
u.printValue(); // 输出 a = 1078523331, b = 3.14
return 0;
}这是因为在 C++ 中,浮点型常量默认被解释为 double 类型,而在 myUnion 中,我们定义了两个重载的 setValue 函数,分别接受 int 类型和 float 类型的参数。因此,当你调用 u.setValue(3.14) 时,编译器无法确定应该调用哪一个 setValue 函数,因为它既可以将 3.14 解释为 float 类型,也可以将其解释为 double 类型。
为了解决这个问题,你可以将 3.14 显式地转换为 float 类型,例如:
u.setValue(static_cast<float>(3.14));
或者将 myUnion 中的 setValue 函数改为只接受 float 类型的参数,例如:
union myUnion {
int a;
float b;
void setValue(int x) {
a = x;
}
void setValue(float x) {
b = x;
}
void printValue() {
cout << "a = " << a << ", b = " << b << endl;
}
};正确代码如下:
#include <iostream>
using namespace std;
union myUnion {
int a;
double b;
void setValue(int x) {
a = x;
}
void setValue(float x) {
b = x;
}
void printValue() {
cout << "a = " << a << ", b = " << b << endl;
}
};
int main() {
myUnion u;
u.setValue(123);
u.printValue(); // 输出 a = 123, b = 1.4013e-45
u.setValue((float)3.14);
u.printValue(); // 输出 a = 1078523331, b = 3.14
return 0;
}野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

