C++ 抽象基类、私有继承和多重公共继承

C++ 抽象基类、私有继承和多重公共继承,c++,inheritance,abstract,multiple-inheritance,C++,Inheritance,Abstract,Multiple Inheritance,我有一个问题或误解。这里我有一些ABC(Person)和两个私有派生的虚拟类(PokerPlayer和Gunslinger)。对于这一部分,在我必须声明从(PokerPlayer和Gunslinger派生的公共类(BadDude)之前,一切都是完美的。问题是=> (一) (三) 我无法从坏人的方法中找到ABC的方法 void BadDude::Show()const { Person::Data(); //the same problem Gunslinger::Data();

我有一个问题或误解。这里我有一些ABC(
Person
)和两个私有派生的虚拟类(
PokerPlayer
Gunslinger
)。对于这一部分,在我必须声明从(
PokerPlayer
Gunslinger
派生的公共类(
BadDude
)之前,一切都是完美的。问题是=>

(一)

(三) 我无法从坏人的方法中找到ABC的方法

void BadDude::Show()const
{
    Person::Data(); //the same problem
    Gunslinger::Data();
    PokerPlayer::Data();
}
这就是演播室对问题1所说的

这就是演播室对问题2所说的

这就是工作室对问题3的看法


这里是问题1的代码:有额外的
人员:
,应该是

BadDude::BadDude(const BadDude & obj) : Person(obj), PokerPlayer(obj) , Gunslinger(obj) {}
对于可访问性问题,请使用受保护(或公共)继承:

class Gunslinger : virtual protected Person
{ /*...*/ };
class PokerPlayer : virtual protected Person
{ /*...*/ };

1) 你的
BadDude
构造函数中有额外的
Person::
。为什么(虚拟)从
Person
私下继承?@MikhailGritsenko只有一个
Person::
-你不会错过的。好吧,如果公开一切都会很好。但是我必须用私有继承来解决这个问题。我做的练习是从PrATA C++ 11中派生类有一个基类(人)和两个派生的类。据我所知,从基类派生的虚拟类的多个派生类有一个基类,这意味着我必须从最后一个派生类调用基类构造函数
error C2436: '{ctor}' : member function or nested class in constructor initializer list
 error C2249: 'Person::operator =' 
: no accessible path to private member declared in virtual base 'Gunslinger'
error C2249: 'Person::Data' : no accessible path to private member declared in virtual base 'Gunslinger'
BadDude::BadDude(const BadDude & obj) : Person(obj), PokerPlayer(obj) , Gunslinger(obj) {}
class Gunslinger : virtual protected Person
{ /*...*/ };
class PokerPlayer : virtual protected Person
{ /*...*/ };