繁体   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