C++ Error 38:关于STD::转发文件成员引用错误 对于学校,我们必须在C++中创建游戏专卖,但在我的游戏中遇到了问题。

C++ Error 38:关于STD::转发文件成员引用错误 对于学校,我们必须在C++中创建游戏专卖,但在我的游戏中遇到了问题。,c++,C++,我想使用std::forward_list模板在其中存储我的cardpointers,但有一些问题我无法解决 错误: 我的甲板头 最后,我的cpp代码本身在有错误的行中添加了额外的注释 如果你能帮我解决我的问题,那就太好了你只是缺少了一些函数调用: void Deck::shuffle() { std::forward_list<Card*> help; help.swap(m_deck); while (!help.empty()) {

我想使用std::forward_list模板在其中存储我的cardpointers,但有一些问题我无法解决

错误:

我的甲板头

最后,我的cpp代码本身在有错误的行中添加了额外的注释


如果你能帮我解决我的问题,那就太好了

你只是缺少了一些函数调用:

void Deck::shuffle()
{
    std::forward_list<Card*> help;
    help.swap(m_deck);

    while (!help.empty())
    {
        if (rand() % 2 == 0)
        {
            m_deck.emplace_front(help.front());
            help.pop_front(); //###line 65###
        }
        else
        {
            m_deck.emplace_after(m_deck.end(), help.front()); //###line 69###
            help.pop_front(); //###line 70###
        }
    }
}

Card* Deck::takeFront()
{
    Card* help = m_deck.front();
    m_deck.pop_front(); //###line 78###
    return help;
}

void Deck::placeBack(Card* card)
{
    m_deck.emplace_after(m_deck.end(), card); //###line 84###
}
你需要帮助。pop_front,而不是help。pop_front.和m_deck.end,而不是m_deck.end
#ifndef DECK
#define DECK

#include "CardType.h"
#include "player.h"
#include "Card.h"
#include <forward_list>

class Deck
{
public:
    Deck(CardType type); //community or chance
    Card* takeFront(); //take the front card of the deck
    void placeBack(Card* card); //place card back behind the deck
    void shuffle(); //pseudo-shuffle
private:
    CardType m_type;
    std::forward_list<Card*> m_deck;
};

#endif
#include"Deck.h"
#include "BirthdayCard.h"
#include "AbsMoneyCard.h"
#include "AbsMoveCard.h"
#include "RelMoneyCard.h"
#include "RelMoveCard.h"
#include "ToJailCard.h"
#include "OutOfJailCard.h"
#include "GoBackCard.h"
#include "PayOrChanceCard.h"


Deck::Deck(CardType type)
{
    if (type == chance)
    {
        m_deck.emplace_front(new AbsMoveCard(chance, "Advance to Mayfair", 39));
        m_deck.emplace_front(new AbsMoveCard(chance, "Advance to Go", 0));
        m_deck.emplace_front(new AbsMoveCard(chance, "Avance to Trafalgar Square If you Pass 'Go' Collect $200", 24));
        m_deck.emplace_front(new AbsMoveCard(chance, "take a Trip to Marylebone Station and if you Pass 'Go' Collect $200", 15));
        m_deck.emplace_front(new AbsMoveCard(chance, "Advance to Pall Mall If you Pass 'Go' Collect $200", 11));
        m_deck.emplace_front(new RelMoneyCard(chance, "You are Assessed for Street Repairs $40 per House $115 per Hotel", 40, 115));
        m_deck.emplace_front(new RelMoneyCard(chance, "Make General Repairs on all of Your Houses. For each House pay $25. For each Hotel pay $100", 25, 100));
        m_deck.emplace_front(new AbsMoneyCard(chance, "Bank pays you dividend of $50", 50));
        m_deck.emplace_front(new AbsMoneyCard(chance, "Pay School Fees of $150.", 150));
        m_deck.emplace_front(new AbsMoneyCard(chance, "Speeding Fine $15", -15));
        m_deck.emplace_front(new AbsMoneyCard(chance, "You have won a Crossword Competition Collect $100", 100));
        m_deck.emplace_front(new AbsMoneyCard(chance, "Your Building and Loan Matures Collect $150", 150));
        m_deck.emplace_front(new AbsMoneyCard(chance, "'Drunk in Charge' Fine $20", -20));
        m_deck.emplace_front(new ToJailCard(chance, "Go to Jail.Move Directly to Jail. Do not pass 'Go' Do not Collect $200."));
        m_deck.emplace_front(new RelMoveCard(chance, "Go back 3 Spaces", -3));
        m_deck.emplace_front(new OutOfJailCard(chance, "Get out of Jail Free"));
    }
    else
    {
        m_deck.emplace_front(new AbsMoneyCard(community, "Income Tax refund Collect $20", 20));
        m_deck.emplace_front(new AbsMoneyCard(community, "From Sale of Stock you get $50", 50));
        m_deck.emplace_front(new AbsMoneyCard(community, "Pay Hospital $100", -100));
        m_deck.emplace_front(new AbsMoneyCard(community, "Receive Interest on 7 % Preference Shares $25", 25));
        m_deck.emplace_front(new AbsMoneyCard(community, "You have Won Second Prize in a Beauty Contest Collect $10", 10));
        m_deck.emplace_front(new AbsMoneyCard(community, "Bank Error in your Favour Collect $200", 200));
        m_deck.emplace_front(new AbsMoneyCard(community, "Annuity Matures Collect $100", 100));
        m_deck.emplace_front(new AbsMoneyCard(community, "You Inherit $100", 100));
        m_deck.emplace_front(new AbsMoneyCard(community, "Doctor's Fee Pay $50", -50));
        m_deck.emplace_front(new AbsMoneyCard(community, "Pay your Insurance Premium $50", -50));
        m_deck.emplace_front(new BirthdayCard(community, "It is YourBirthday Collect $10 from each Player", 10));
        m_deck.emplace_front(new OutOfJailCard(community, "Get out of Jail Free"));
        m_deck.emplace_front(new AbsMoveCard(community, "Advance to 'Go'", 0));
        m_deck.emplace_front(new ToJailCard(community, "Go to Jail.Move Directly to Jail. Do not Pass 'Go'. Do not Collect $200"));
        m_deck.emplace_front(new GoBackCard(community, "Go Back to Old Kent Road", 1));
        m_deck.emplace_front(new PayOrChanceCard(community, "Pay a $10 Fine or Take a 'Chance'", 10));
    }
}

void Deck::shuffle()
{
    std::forward_list<Card*> help;
    help.swap(m_deck);

    while (!help.empty())
    {
        if (rand() % 2 == 0)
        {
            m_deck.emplace_front(help.front());
            help.pop_front; //###line 65###
        }
        else
        {
            m_deck.emplace_after(m_deck.end ,help.front()); //###line 69###
            help.pop_front; //###line 70###
        }
    }
}

Card* Deck::takeFront()
{
    Card* help = m_deck.front();
    m_deck.pop_front; //###line 78###
    return help;
}

void Deck::placeBack(Card* card)
{
    m_deck.emplace_after(m_deck.end, card); //###line 84###
}
void Deck::shuffle()
{
    std::forward_list<Card*> help;
    help.swap(m_deck);

    while (!help.empty())
    {
        if (rand() % 2 == 0)
        {
            m_deck.emplace_front(help.front());
            help.pop_front(); //###line 65###
        }
        else
        {
            m_deck.emplace_after(m_deck.end(), help.front()); //###line 69###
            help.pop_front(); //###line 70###
        }
    }
}

Card* Deck::takeFront()
{
    Card* help = m_deck.front();
    m_deck.pop_front(); //###line 78###
    return help;
}

void Deck::placeBack(Card* card)
{
    m_deck.emplace_after(m_deck.end(), card); //###line 84###
}