繁体   English   中英

具有多重继承的重载解析

[英]Overload resolution with multiple inheritance

考虑以下示例( 链接到ideone ):

#include <iostream>

class Base1
{
public:
    void doit(){}
};

class Base2
{
    void doit(int x){}
};

class Derrived : public Base1, public Base2
{
};

using namespace std;

int main()
{
   cout << "Hello World" << endl;
   Derrived d;
   d.doit(); // doesn't work - error: request for member ‘doit’ is ambiguous
   d.::Base1::doit(); //works
   return 0;
}

Base1和Base2都具有带有不同输入参数的成员函数doit,因此理论上的重载应自动解决。 但是,尝试调用d.doit();。 因错误而失败

prog.cpp: In function ‘int main()’:
prog.cpp:36:6: error: request for member ‘doit’ is ambiguous
    d.doit(); // doesn't work - error: request for member ‘doit’ is ambiguous
      ^
prog.cpp:18:7: note: candidates are: void Base2::doit(int)
  void doit(int x)
       ^
prog.cpp:6:10: note:                 void Base1::doit()
     void doit()
          ^

我必须输入d。:: Base1 :: doit(); 使它工作。

为什么在没有我明确指定的情况下编译器无法解析要调用的函数? 它是预期的行为吗?

是的,这是预期的行为。

在重载解析之前,将执行名称查找 ,该查找具有其自己的一组规则。 它必须找到一个明确的名称,而您的情况中没有一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM