我有这两个类:
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()
等函数,还是有其他方法可以避免错误。
答案 0 :(得分: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);
};
答案 1 :(得分:0)
由于您的类Deck继承自Hand(并且它不是朋友类,也不是方法Deck::shuffle()
),因此您只需创建cards
protected
而不是private
。这确保封装到位,但所有派生类都可以访问该方法。
在其他参考资料和教程中看一下:
答案 2 :(得分: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;
};