C++ C++;简单构造函数问题

C++ C++;简单构造函数问题,c++,constructor,C++,Constructor,我正在尝试制作一个类,它是一个玩家的手牌(在一个针对前玩家的纸牌游戏中)。draw方法将绘制另一张卡,showHand方法应显示手中的当前卡。我曾尝试初始化构造函数中的指针数组,但不知如何初始化(我认为这就是问题的根源)。尝试现在注释掉这个->jon={};给出此错误:“错误:将“”分配给“卡*[12]”时类型不兼容” ***目前,如果我只是试图阻止jon[I]->getRank()的话,就会弹出一堆废话;然而,Draw方法非常有效 class myHand{ public: myHand(

我正在尝试制作一个类,它是一个玩家的手牌(在一个针对前玩家的纸牌游戏中)。draw方法将绘制另一张卡,showHand方法应显示手中的当前卡。我曾尝试初始化构造函数中的指针数组,但不知如何初始化(我认为这就是问题的根源)。尝试现在注释掉这个->jon={};给出此错误:“错误:将“”分配给“卡*[12]”时类型不兼容”

***目前,如果我只是试图阻止jon[I]->getRank()的话,就会弹出一堆废话;然而,Draw方法非常有效

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