2013-07-27 20 views
4

我有以下两类:错误:成员不可访问

class Hand 
{ 
public: 
    int getTotal(); 
    std::vector<Card>& getCards(); 
    void add(Card& card); 
    void clear(); 
private: 
    std::vector<Card> cards; 
}; 

class Deck : public Hand 
{ 
public: 
    void rePopulate(); 
    void shuffle(); 
    void deal(Hand& hand); 
}; 

shuffle()函数声明如下:

void Deck::shuffle() 
{ 
    std::random_shuffle(cards.begin(), cards.end()); 
} 

然而,这将返回以下错误:

'Hand::cards' : cannot access private member declared in class 'Hand' 

我是否应该只包含一个函数,例如std::vector<Card>& getCards()或者是否有另一种避免确认错误。

回答

2

你可以声明卡作为protected

class Hand 
{ 
public: 
    int getTotal(); 
    std::vector<Card>& getCards(); 
    void add(Card& card); 
    void clear(); 
protected: 
    std::vector<Card> cards; 
}; 

class Deck : public Hand 
{ 
public: 
    void rePopulate(); 
    void shuffle(); 
    void deal(Hand& hand); 
}; 
0

在继承的情况下(你的情况),最好的解决办法是让cards保护:

protected: 
    std::vector<Card> cards; 

但总的来说,你可以让他们成为朋友。

class Hand 
{ 
friend class Deck; 
public: 
    int getTotal(); 
    std::vector<Card>& getCards(); 
    void add(Card& card); 
    void clear(); 
private: 
    std::vector<Card> cards; 
};