当我尝试编译(使用 gcc 4.3.4)此代码段时:
enum SimpleEnum {
ONEVALUE
};
void myFunc(int a) {
}
void myFunc(char ch) {
}
struct MyClass {
operator int() const { return 0; };
operator SimpleEnum() const { return ONEVALUE; };
};
int main(int argc, char* argv[]) {
myFunc(MyClass());
}
我收到此错误:
test.cc: In function "int main(int, char**)":
test.cc:17: error: call of overloaded "myFunc(MyClass)" is ambiguous
test.cc:5: note: candidates are: void myFunc(int)
test.cc:8: note: void myFunc(char)
我想我(几乎)理解问题是什么,即(简化了很多)即使我谈到“char”和“enum”,它们都是整数,然后重载是模棱两可的。
无论如何,我不太明白的是,如果我删除myFunc的第二次重载 或MyClass的转换运算符之一,我没有编译错误。
由于这个问题我要更改很多旧代码(我正在将代码从旧版本的 HP-UX aCC 移植到 Linux 下的 g++ 4.3.4),我想更好地理解整个事情为了选择修改代码的最佳方式。
预先感谢您的任何帮助。