[英]Error: Member is inaccessible
我有這兩節課:
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()
類的函數,還是有另一種避免錯誤的方法。
您可以將卡片聲明為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);
};
由於您的Deck類是從Hand繼承的(它不是一個朋友類,也不是Deck::shuffle()
),因此您可以簡單地使cards
protected
而不是private
。 這樣可以確保封裝到位,但所有派生類都可以訪問該方法。
只需看一下,以及其他參考資料和教程,即可:
在繼承的情況下(您的情況),最好的解決方案是對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;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.