2015-05-19 1 views
0

У меня проблема или недоразумение. Здесь у меня есть 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) Я не могу достигают защищенный метод ABC от метода BadDude в

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' 

Здесь код enter link description here

+0

1) У вас есть дополнительный человек: : 'в конструкторе' BadDude'. – Jarod42

+0

H! I Где именно? – Mikhail

+1

Почему (виртуальный) наследует конфиденциально от 'Person'? – Jarod42

ответ

0

Для задачи 1: есть дополнительный Person::, она должна быть

BadDude::BadDude(const BadDude & obj) : Person(obj), PokerPlayer(obj) , Gunslinger(obj) {} 

Для проблемы доступности, использования защищенное (или общедоступное) наследование:

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

производный класс имеет один базовый класс (Person) и два фактически производных класса, которые производятся от Person. Поскольку я знаю, что множественный производный класс из виртуальных классов, который имеет базовый класс, имеет один базовый класс, и это означает, что я должен вызвать конструктор базового класса из последнего производного класса – Mikhail

+0

Хорошо, в любом случае, спасибо! – Mikhail