Type casting error, Card_Game * to Blackjack_Game *
Errors, trying to derive a Blackjack_Game class from Card_Game, getting errors when passing the Blackjack_Game pointer to a function that takes a Card_Game pointer.
Code:
error C2243: 'type cast' : conversion from 'Blackjack_Game *' to 'Card_Game *' exists, but is inaccessible
error C2243: 'type cast' : conversion from 'Blackjack_Game *' to 'Card_Game *' exists, but is inaccessible
error C2243: 'type cast' : conversion from 'Blackjack_Game *' to 'Card_Game *' exists, but is inaccessible
error C2243: 'type cast' : conversion from 'Blackjack_Game *' to 'Card_Game *' exists, but is inaccessible
Card_Game.h:
Code:
class Card_Game
{
public:
Card_Game(){}
~Card_Game(){}
virtual void init(){}
virtual void cleanup(){}
virtual void turn_logic(std::string player_id);
std::vector<std::string> m_vPlayer_List;
int calculate_winnings();
void new_setting(std::string name, Setting * new_setting);
void initialize_players();
// Give player id a new hand
void give_player_hand(std::string player_id);
void shuffle_deck(int deck_id);
// Draw how_many cards to player id's hand_id from deck_idntyd
void draw_card(std::string player_id, int hand_id, int deck_id, int how_many);
void place_bet(std::string player_id, int bet);
// Split player's active hand
void split_hand(std::string player_id, int hand_id);
// check if hand value > check_value
bool check_hand_value(std::string player_id, int hand_id, int check_value);
protected:
Resource_Manager< Player > m_rPlayers;
Resource_Manager< std::vector<Hand*> > m_rHands;
Resource_Manager< int* > m_rBets;
Resource_Manager< Deck* > m_rDecks;
Resource_Manager< Setting* > m_rSettings;
std::vector< Deck* > m_vDeck;
};
And Blackjack_Game.h
Code:
class Blackjack_Game : private Card_Game
{
public:
Blackjack_Game(){}
virtual void init()
{
new_setting( "Minimum Bet", new Integer_Setting(25) );
}
virtual void cleanup(){}
virtual void turn_logic(std::string player_id)
{
int m_result;
switch(m_result)
{
case 1:
draw_card(player_id, m_rPlayers.get_resource(player_id).px->m_active_hand, 0, 1);
if(check_hand_value(player_id, m_rPlayers.get_resource(player_id).px->m_active_hand, 21))
{
m_rPlayers.get_resource(player_id).px->m_winner = false;
}
break;
case 2: // stay hand
// while dealer has hand value less than 18
while(check_hand_value("Dealer", 0, 18))
{
draw_card("Dealer", 0, 0, 1); // (for dealer draw to 0 hand, from 0 deck, 1 card)
}
// if the dealer goes over 21
if (check_hand_value("Dealer", 0, 21))
{
// player wins
m_rPlayers.get_resource(player_id).px->m_winner = true;
//state_manager->change_state( Deal_State::instance(), game );
}
// if player's hand value is greater than the dealer's
else if( check_hand_value(player_id, m_rPlayers.get_resource(player_id).px->m_active_hand,
m_rHands.get_resource("Dealer").px->at(0)->point_value()))
{
// player wins
m_rPlayers.get_resource(player_id).px->m_winner = true;
//state_manager->change_state( Deal_State::instance(), game );
}
else
{
// player loses
m_rPlayers.get_resource(player_id).px->m_winner = false;
//state_manager->change_state( Deal_State::instance(), game );
}
break;
case 3: // double down?
if (m_rHands.get_resource(player_id).px->at(m_rPlayers.get_resource(player_id).px->m_active_hand)->get_size() == 2)
{
//game->m_players[1].bet(game->m_players[1].m_bets[game->m_players[1].m_active_hand]);
draw_card(player_id, m_rPlayers.get_resource(player_id).px->m_active_hand, 0, 1);
if( check_hand_value(player_id, m_rPlayers.get_resource(player_id).px->m_active_hand,
m_rHands.get_resource("Dealer").px->at(0)->point_value()))
{
// player wins
m_rPlayers.get_resource(player_id).px->m_winner = true;
//state_manager->change_state( Deal_State::instance(), game );
}
else
{
// player loses
m_rPlayers.get_resource(player_id).px->m_winner = false;
//state_manager->change_state( Deal_State::instance(), game );
}
}
else { break; }
case 4:// split hand
split_hand(player_id, m_rPlayers.get_resource(player_id).px->m_active_hand);
break;
case 5: // fold
// player loses
m_rPlayers.get_resource(player_id).px->m_winner = false;
//state_manager->change_state( Deal_State::instance(), game );
break;
default:// invalid entry
std::cout << "Please enter 1 or 2.\n";
break;
}
}
};
Any ideas?