C++ C++;简单构造函数问题
我正在尝试制作一个类,它是一个玩家的手牌(在一个针对前玩家的纸牌游戏中)。draw方法将绘制另一张卡,showHand方法应显示手中的当前卡。我曾尝试初始化构造函数中的指针数组,但不知如何初始化(我认为这就是问题的根源)。尝试现在注释掉这个->jon={};给出此错误:“错误:将“”分配给“卡*[12]”时类型不兼容” ***目前,如果我只是试图阻止jon[I]->getRank()的话,就会弹出一堆废话;然而,Draw方法非常有效C++ C++;简单构造函数问题,c++,constructor,C++,Constructor,我正在尝试制作一个类,它是一个玩家的手牌(在一个针对前玩家的纸牌游戏中)。draw方法将绘制另一张卡,showHand方法应显示手中的当前卡。我曾尝试初始化构造函数中的指针数组,但不知如何初始化(我认为这就是问题的根源)。尝试现在注释掉这个->jon={};给出此错误:“错误:将“”分配给“卡*[12]”时类型不兼容” ***目前,如果我只是试图阻止jon[I]->getRank()的话,就会弹出一堆废话;然而,Draw方法非常有效 class myHand{ public: myHand(
class myHand{
public:
myHand(){
this->size=0;
//this->jon={};
}
void Draw(Card anyCard) {
if(size>11) {
cout<<"You can only have a maximum of 12 cards in your hand at a time"<<endl;
return;
}
jon[size]=&anyCard;
cout<<"HERE IS ANYCRD:"<<jon[size]->getRank()<<jon[size]->getSuit()<<endl;
size++;
}
void showHand() {
//DOESNT WORK HERE
}
void Place(Card* anyCard) {
}
private:
int size;
Card* jon[12];
};
classmyhand{
公众:
我的手(){
这个->大小=0;
//这->乔恩={};
}
无效提款(任何卡){
如果(尺寸>11){
你的问题是悬而未决的指针
你更大的问题在于使用指针。只是不要这样做。存储一个实际卡
对象的数组。数组是不可分配的,也就是说,一些数组={}
在初始化点之后是非法的
您的数组此时已初始化。但它确实包含垃圾,因此您需要在使用它之前初始化每个元素
顺便说一句
jon[size]=&anyCard;
这是错误的。您正在存储局部变量的地址。一旦函数退出,该指针就会失效。您正在存储局部变量的地址:
jon[size]=&anyCard;
当它超出范围时(当函数离开时),它会被销毁。如果要在jon中存储指针,至少需要制作一份副本。jon[size]= C++和java代码。这是C++,而不是Java。你不需要<代码> -> <代码>。它的值是通过那个函数传递的,不像其他函数。<代码>你不知道指针何时会变为无效。< /代码>是的,当控件离开那个函数的范围时,它就变得无效。y很快。@Non-StopTimeTravel,我打赌这是因为Place
获取了一个指针,所以可能会传播到Draw
函数。@chris:可能。如果是这样,操作码“向后”。可能会将C字符串存储在任何地方,因为一个API函数需要std::string::C_str()
作为输入。不管怎样,当绘图结束时,指针将无效。@Non-StopTimeTravel,确实如此。这似乎是造成混乱的可能原因。我所看到的每个源代码都表明,不能将实际对象存储在数组中;只有指向的指针them@DaxDurax:.请提供一个你在哪里看到这个统计数据的例子ED,这样我就可以联系作者,直接把它们整理好,并要求他们修改他们的资料。从这本C++书籍的列表中,没有一个会做出如此可恶的谎言。甚至更好的是,使用<代码> STD::向量< /C>。可变长度。检查。很容易使用。检查。不必担心内存管理。检查。就像人们发明的。e> std::vector
对于刚开始实施纸牌游戏的程序员来说!@DaxDurax,你是不是碰巧提到多态性?@us2012:真的是!:D