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

时间:2014-10-15 04:50:04

标签: c++ class inheritance

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

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);
  }

我不明白为什么我不能像这样访问功能cardCopy ..手是卡片类型!!!

2 个答案:

答案 0 :(得分:4)

因为你的“手”是你必须使用的指针 - &gt;运算符来访问成员变量和函数

class player{
 card *hand // member pointer of card type
}

void player::setHand(card *c)
{
  hand->cardCopy(c);
}

答案 1 :(得分:2)

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

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

  • *手中没有类型    声明。

  • 手是一个指针,所以你需要使用 - &gt;    运营商访问其成员。

  • 手被初始化为    构造函数中长度为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()的实现,以使其正常工作。我提供了一个方便,但我无法确定我的实现是否完全符合您的要求。