【发布时间】:2010-09-27 23:39:03
【问题描述】:
假设我有三个班级:
class X{};
class Y{};
class Both : public X, public Y {};
我的意思是说我有两个类,然后是扩展这两个类的第三个类(多重继承)。
现在说我在另一个类中定义了一个函数:
void doIt(X *arg) { }
void doIt(Y *arg) { }
我用两者的实例调用这个函数:
doIt(new Both());
这会导致编译时错误,说明函数调用不明确。
除此之外,C++ 编译器在哪些情况下判断调用不明确并抛出错误(如果有)?编译器如何确定这些情况是什么?
【问题讨论】:
-
是的,但我没有使用 C++ 编译器
-
codepad.org for gcc 和 comeaucomputing.com/tryitout for comeau 是两个很好的快速测试网站。
-
啊,键盘是我要找的,谢谢!我也在寻找有关该主题的解释,而不仅仅是“如果我运行它,它是如何工作的”
-
@Claudiu,我为我的答案添加了指向源材料的链接。
-
doIt(string a) 和 doIt(char *a) 也有类似的问题。这不是“试一试”的问题。即使使用“char *”,它也会调用 doIt(string a),所以这是一个有效的问题。遇到这个是因为我正在调用一个使用字符串类型的函数,而该函数又调用了 char * 版本的 teh 函数。然而,字符串输入函数无限期地递归,直到它炸毁堆栈。
标签: c++ inheritance programming-languages function multiple-inheritance