C++ 叮当声:错误:链接器命令在C+;中失败,退出代码为1(使用-v查看调用)+;代码
在下面的代码中,在C++ 叮当声:错误:链接器命令在C+;中失败,退出代码为1(使用-v查看调用)+;代码,c++,xcode,class,C++,Xcode,Class,在下面的代码中,在void Player::chooseDiscard中,我试图将类卡的丢弃值分配给同一类的discardList数组,但编译器识别它就像对“Player::discardList”的未定义引用一样。。我怎样才能防止这个错误 class Player { public: Player(); virtual void chooseDiscard(int); void replenish( ); vector<Card>allCards; friend
void Player::chooseDiscard
中,我试图将类卡的丢弃值分配给同一类的discardList数组,但编译器识别它就像对“Player::discardList”的未定义引用一样。
。我怎样才能防止这个错误
class Player
{
public:
Player();
virtual void chooseDiscard(int);
void replenish( );
vector<Card>allCards;
friend ostream& operator<<(ostream& os, Card hand);
int selfIndex; //index within player vector, starting with 0 for the human
vector<Card>hand; //holds 7 cards
protected:
int takeFrom; //player supplying new Car
Card discard; //card being discarded
int discardIndex; //position within hand of card being discarded
static Card discardList[];
};
void Player::chooseDiscard(int number)
{
discard = hand[number-97];
discardIndex = number-97;
discardList[selfIndex] = discard;
}
职业玩家
{
公众:
Player();
虚拟void-chooseDiscard(int);
虚空补充();
矢量卡;
friend ostream&operator您声明了discardList
作为类Player
的静态数据成员,但是这样做并不是定义它
C++标准ISO的标准如下:
静态数据成员在其类定义中的声明不是定义,可能是不完整的
除cv限定void之外的类型。静态数据成员的定义应出现在命名空间中
包含成员的类定义的作用域。在命名空间作用域的定义中,静态
数据成员应使用::运算符通过其类名进行限定
因此编译器(实际上是链接器抱怨)报告未定义引用是正确的,因为从未定义过discardList
您应该做的是定义discardList
在类Player
的范围之外,类似于:
Card Player::discardList[] = {/* PUT SOME Card objects IN HERE*/};
使用C数组可能会有很大的限制,因为它有一个固定的大小,但是如果您知道discardList
永远不会增长或收缩,那么使用C数组可能会非常有效。否则,使用std::vector是更好的选择。按照某人的建议,用向量替换数组也没有帮助。