我有一个问题或误解。这里我有一些ABC(Person
)也有两个私有派生的虚拟类(PokerPlayer
和Gunslinger
)。对于这一部分,一切都很完美,直到我必须声明一个派生自(BadDude
和PokerPlayer
)的公共类(Gunslinger
)。问题是=>。
1)
BadDude::BadDude(const BadDude & obj)
: Person::Person(obj) /*<- the problem*/, PokerPlayer(obj) , Gunslinger(obj) {}
2)
这也发生在operator=();
。
BadDude & BadDude::operator=(const BadDude & obj)
{
if (this == & obj)
return *this;
Person::operator=(obj); //dose not work
PokerPlayer::oprtr(obj);
Gunslinger::oprtr(obj);
return *this;
}
3) 我无法从BadDude的方法中获得受保护的ABC方法
void BadDude::Show()const
{
Person::Data(); //the same problem
Gunslinger::Data();
PokerPlayer::Data();
}
这就是工作室对问题#1的说法
error C2436: '{ctor}' : member function or nested class in constructor initializer list
这就是工作室对问题#2的说法
error C2249: 'Person::operator ='
: no accessible path to private member declared in virtual base 'Gunslinger'
这就是工作室对问题#3的说法
error C2249: 'Person::Data' : no accessible path to private member declared in virtual base 'Gunslinger'
答案 0 :(得分:0)
对于问题1:还有额外的Person::
,它应该是
BadDude::BadDude(const BadDude & obj) : Person(obj), PokerPlayer(obj) , Gunslinger(obj) {}
对于可访问性问题,请使用受保护(或公共)继承:
class Gunslinger : virtual protected Person
{ /*...*/ };
class PokerPlayer : virtual protected Person
{ /*...*/ };