簡體   English   中英

錯誤:無法訪問成員

[英]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 這樣可以確保封裝到位,但所有派生類都可以訪問該方法。

只需看一下,以及其他參考資料和教程,即可:

  1. http://www.cplusplus.com/doc/tutorial/inheritance/
  2. http://www.learncpp.com/cpp-tutorial/115-inheritance-and-access-specifiers/

在繼承的情況下(您的情況),最好的解決方案是對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM