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

标签 c++ inheritance ambiguous

我如何在不继承类 A 的情况下使用类 D 中的类 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 类:虚拟公共(public) A

多重继承中的这个问题称为菱形问题。查看此链接以了解更多信息 http://www.cprogramming.com/tutorial/virtual_inheritance.html

关于c++ - 了解如何解决 C++ 中不明确的成员请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16623394/

相关文章:

Java 方法覆盖和变量阴影

c# - 如何在继承链的中间插入类?

c++ - 使用 CRTP 模式时继承的模糊方法

c++ - 模板类构造函数中的动态分配

java - Java中的@Inherited注解

c++ - 格式化适合语言环境的日和月,不带年

c++ - 为什么我在使用 getline() 时遇到问题? "No instance of overloaded functions matches the argument list"和 "data is ambiguous"

c++ - Clang 模糊调用(int、float、double)

java - 从 C/C++ 执行交互式 CLI 应用程序

C++:带有 API 的应用程序架构