gpt4 book ai didi

c++ - C++ 中的菱形继承(钻石问题)代码未按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 11:49:07 25 4
gpt4 key购买 nike

我正在尝试了解 C++ 中菱形问题(多重继承)的解决方案。

我编写这段代码是为了更好地理解解决方案,但它的行为并不像预期的那样。

#include <stdio.h>

class A
{
public:
void Print()
{
printf("A\n");
}
};

class B : virtual public A
{
public:
void Print()
{
printf("B\n");
}
};

class C : virtual public A
{
public:
void Print()
{
printf("C\n");
}
};

class D : public B, public C
{
};

int main()
{
D d;
d.Print();
}

Visual Studio 2008 Express Edition 大喊:错误 C2385:“打印”访问不明确1> 可能是基数“B”中的“打印”1> 或者可以是基数“C”中的“打印”错误 C3861:“打印”:找不到标识符

任何人都可以告诉我我在这里缺少什么吗?

最佳答案

d.Print() 应该调用哪个版本的 Print()?有两种选择。不过,您可以选择:

d.A::Print(); // this one isn't part of the overload set search without qualification
d.B::Print();
d.C::Print();

请注意,将 A::Print() 设为 virtual 函数无济于事,因为没有唯一的最终覆盖函数。您需要显式覆盖 D 中的 Print()

关于c++ - C++ 中的菱形继承(钻石问题)代码未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19013770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com