2017-02-19 95 views
-1

Я новичок в C++, и я пытаюсь создать экземпляр Player, который принимает аргумент RoleCard. Я хотел бы иметь возможность пройти MedicCard, которая наследует RoleCard в Driver.cpp. Однако я не могу найти подходящий способ сделать это. Моя цель состояла бы в том, чтобы динамически изменять переменную roleCard для создания новых экземпляров проигрывателя.Передача дочернего класса в качестве параметра в конструкторе

Driver.cpp

RoleCard roleCard; 
MedicCard medicCard;  
roleCard = medicCard; 

Player demoPlayer(roleCard); 

Player.h

#pragma once 
#include "RoleCard.h" 
#include <string> 
#include <vector> 

class Player 
    { 
    public: 
     Player(); 
     Player(RoleCard rolecard);    
    }; 

Player.cpp

#include "stdafx.h" 
#include "Player.h" 
#include<string> 

using namespace std; 

Player::Player() 
{ 
} 

Player::Player(RoleCard roleCard) 
{  
} 

RoleCard.h

#pragma once 

class RoleCard 
{ 
public: 
    RoleCard(); 
}; 

class MedicCard: public RoleCard 
{ 
public: 
    MedicCard(); 
}; 

RoleCard.cpp

#include "stdafx.h" 
#include "RoleCard.h" 

using namespace std; 

RoleCard::RoleCard() 
{  
} 
MedicCard::MedicCard() 
{  
} 
+1

Что такое ошибка в частности? Пожалуйста, добавьте текст ошибки дословно на свой вопрос ([edit]). –

+0

Это не ваша ошибка. Скопируйте/вставьте исходный вывод из компилятора. Если это _is_ ваша ошибка, код, который вы показываете нам, - это не код, который вы пытаетесь скомпилировать; пожалуйста, предоставьте [mcve] и покажите нам вывод _that_. –

ответ

0

При назначении объекта производного класса к объекту базового класса, как этот

RoleCard roleCard; 
MedicCard medicCard;  
roleCard = medicCard; 

вы discard all of the data в производном классе (иначе известный как нарезка). Если вы хотите полиморфное поведение, ссылки на использование или указатели на базовый класс:

Player(RoleCard& rolecard); 
... 
MedicCard medicCard; 
Player demoPlayer(medicCard); 
+0

Благодарим вас за ответ и отличную ссылку – leon05