我有以下没有编译的程序:
class Interface1
{
virtual void f() = 0;
};
class Interface2
{
virtual void f(int i) = 0;
};
class Interface3 : public Interface1,
public Interface2
{};
class C : public Interface3
{
virtual void f() {}
virtual void f(int i) {}
};
int main()
{
Interface3* inter = new C();
inter->f(); // Error
}
有什么问题?这是否意味着如果方法具有不同的参数类型并不重要?
错误:成员'f'的请求不明确
注意:候选人是:virtual void Interface1 :: f()
...
注意:virtual void Interface2 :: f(int i)
答案 0 :(得分:1)
问题是两个基类型中的f
的两个定义没有在同一范围内定义,因此它们不会重载。 f
中有两个名为Interface3
的单独函数,没有选择其中一个的规则。