从另一个类中访问私有数据成员

Access private data members from within another class

本文关键字:数据成员 访问 另一个      更新时间:2023-10-16

我有一个播放器类。在课堂上,我有一只三号的手,是卡片型的。卡是另一类。我试图通过类访问hand的私有数据成员,但在播放器类内部。这是我得到的错误:

scat.cpp: In member function ‘void player::setHand(card*)’:
scat.cpp:117:10: error: request for member ‘cardCopy’ in     
‘((player*)this)->player::hand’, which is of pointer 
type ‘card*’ (maybe you meant to use ‘->’ ?)hand.cardCopy(c);

#include <iostream>
using namespace std;
class card{
    char *suit;
    char *rank;
    int cvalue;
    char *location;
public:
    card::cardCopy(card *c);
};
class player{
card *hand;
public:
    player::setHand(card *c);
};
void card::cardCopy(card *c)
{
  strcopy(rank, (*c).rank);
  strcopy(suit, (*c).suit);
  strcopy(location, (*c).location);
  cvalue = (*c).cvalue;
}
player::player()
   {
    name = new char[20];
    hand = new card[3];
}
void player::setHand(card*c)
  {
    hand.cardCopy(c);
  }

我不明白为什么我不能访问功能卡像这样复制。。手是一种卡片类型!!!

因为你的"手"是一个指针,所以你必须使用->运算符来访问成员变量和函数

class player{
 card *hand // member pointer of card type
}
void player::setHand(card *c)
{
  hand->cardCopy(c);
}

好吧,我可以看到你的代码有几个问题:

  • 在类声明中,您声明的函数没有指定返回类型。

  • *手上没有类型公告

  • 手是指针,因此需要使用->操作员访问其成员。

  • 手被初始化为构造函数中长度为3的数组,但您没有指定您试图访问的元素。

试试这个:

#include <iostream>
#define strcopy(a,b) *a=*b
using namespace std;
class card
{
private:
    char *suit;
    char *rank;
    int cvalue;
    char *location;
public:
    void cardCopy(card *c);
};
class player
{
private:
    char *name;
    card *hand;
public:
    player();
    void setHand(card *c);
};
void card::cardCopy(card *c)
{
  strcopy(rank, c->rank);
  strcopy(suit, c->suit);
  strcopy(location, c->location);
  cvalue = c->cvalue;
}
player::player()
{
    name = new char[20];
    hand = new card[3];
}
void player::setHand(card*c)
{
    hand[0].cardCopy(c);
}

当然,您还需要在这个范围内提供strcopy()的实现,这样才能工作。为了方便起见,我提供了一个,但我不能确定我的实现是否会完全按照您的意愿进行。