【发布时间】:2015-05-19 11:37:43
【问题描述】:
我有问题或误解。这里我有一些 ABC(Person)还有两个私有派生的虚拟类(PokerPlayer 和 Gunslinger)。在我必须声明一个派生自(PokerPlayer 和Gunslinger)的公共类(BadDude)之前,这部分一切都很完美。问题是=>。
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'
【问题讨论】:
-
1) 你的
BadDude构造函数中有额外的Person::。 -
为什么(虚拟)从
Person私下继承? -
@MikhailGritsenko 只有一个
Person::- 你不能错过它。 -
好吧,如果公开一切都会正常工作。但我必须用私有继承来解决这个问题。我正在从 Prata c++ 11 做练习
标签: c++ inheritance abstract multiple-inheritance