我有一个球员类。在课堂上,我有一个三号手,是卡片式的。卡是另一类。我试图通过类访问私有数据成员,但在播放器类中。这是我得到的错误:
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 ..手是卡片类型!!!
答案 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()的实现,以使其正常工作。我提供了一个方便,但我无法确定我的实现是否完全符合您的要求。