了解如何在c++中解决不明确的成员请求

Understanding how to solve ambiguous member requests in c++

本文关键字:不明确 成员 请求 解决 c++ 了解      更新时间:2023-10-16

我如何从类D中使用类a中的函数而不继承类a和(虽然我知道这是不好的做法,但我根本不允许更改继承),而不删除D中的C和B的继承?我似乎无法找到一种方法来绕过请求成员是模棱两可的错误。我(错误地)认为无论

离得有多远
class A 
{
public:
  void DoEverything(int){ }
};
class B : public A
{
public:
    ...
};
class C : public A
{
public:
    ...
};
class D : public C : public B
{
public:
    ...
};
int main() 
{
  D dMan;
  int i = 2;
  dMan.DoEverything(i);
}

我的例子松散地基于"模糊基类(仅限c++)"的例子:http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/topic/com.ibm.xlcpp8a.doc/language/ref/cplr138.htm#cplr138,但这并没有帮助我理解这个问题。

首先,要使它工作,只需做以下更改

类B:虚拟公网A…

类C: virtual public A

这个问题在多重继承中被称为菱形问题。点击这个链接了解更多http://www.cprogramming.com/tutorial/virtual_inheritance.html