我要做的是:

将功能替换添加到随牌通过值作为参数传递的卡座类。的
卡放在卡座的底部

CardPtr是一个私有类变量,它设置为构造函数中卡片组的顶层卡片

node<card> *newCard; //card pointer
newCard = new node<card>(card(2, 0), NULL);  //points to the first card
CardPtr = newCard; //sets cardpointer to newcard


一个单独的类将最上面的卡片拿走并显示该值,从而在该过程中从卡组中删除该节点。我正在尝试将该卡放回底部。那么这是代码:

    `void deck::replace(card BottomCard)
    {
        int count = 0;
        node<card> *replaceptr;
        bottom = NULL;
        replaceptr = new node<card>(BottomCard, NULL);
        if (bottom != NULL)
        {
    bottom->next = replaceptr;
        }
        else
        {
    bottom = replaceptr;
        }

        if (count >= 52)
        {
            throw overflowError("ERROR: Deck is already full");
        }

        //CardPtr = new node<card>(BottomCard, NULL);
        //bottom->next = CardPtr;
}


我在我的主要代码中实现了它,它似乎取代了卡座顶部的卡。谁能帮我吗?谢谢。

这是我完整的构造函数:

    deck::deck() // deck constructor
{
    node<card> *newCard; //card pointer
    newCard = new node<card>(card(2, 0), NULL);  //points to the first card
    CardPtr = newCard; //sets cardpointer to newcard

    for (int i = 0; i < 4; i++)
    {
        for (int j = 2; j < 15; j++)
        {
            if (i == 0 && j == 2) continue;

            node<card> *temp = new node<card>(card(j, i), NULL);  // temporary pointer sets card value and suit to numbers for value and suit

            newCard->next = temp;// sets newcard pointer .next to temp
            newCard = temp;// sets newcard to temp
        }
    }
}

最佳答案

如果CardPtr总是始终指向最上面的卡片(链接列表的开始),则应更改此方法的代码,以使它不会修改CardPtr。也许声明另一个局部变量,将其初始化为等于CardPtr,然后在循环中反复修改该指针(以使CardPtr永不改变)。

从卡组顶部发牌的另一种方法也可能没有使CardPtr处于良好状态(指向新的顶部卡),这意味着您有多个问题需要解决。

09-06 10:04