C ++ STD :: List:遍历列表的麻烦

时间:2020-07-17 18:45:50

标签: c++ list loops inheritance iterator

运行我的代码时,它可以很好地编译,但是我不明白为什么它没有迭代并打印出我的列表。

我有一个子类Games和超类:play_ballstatistics

目标是让玩家玩游戏,跟踪他们赢得比赛的尝试次数。在每次播放的结尾,它将跟踪每个播放的统计信息并将其推到stats列表的末尾。

我想我已经为此做好了一切,但是当我打印统计数据时,它甚至没有遍历列表的任何部分。

我在main.cpp中初始化列表,并将统计信息推入play()类中play_ball函数的末尾。

在每局游戏结束时是否由于某种原因未填写列表?如果是这样,我该如何解决?

这是我的代码:

games.h:

class games {
    friend class statistics;
    friend class play_ball;
private:
    std::string type;
    int attempts = 0;
public:
    games();
    ~games();
    virtual void play(std::list<stats>) = 0;
};

static int plays = 0;

play_ball.cpp:

void stats::play(std::list<stats> sts)
{
    // Plays the game...
    sts.push_back(stats(get_plays(), "Ball ", count));
}

stats.cpp

void stats::play(std::list<stats> sts)
{
    if (get_plays() == 0)
    {
        printf("ERROR: No game history.\n");
    }
    else
    {
        std::cout << "[Game Type     Attempts:]\n";
        // This should go through and print out: [game number] Ball  (# of attempts)
        // but when I run it, it just skips the loop and prints the "Thanks for playing!"
        for (std::list<stats>::iterator p = sts.begin(); p != sts.end(); ++p)
        {
            std::cout << '[' << (*p).get_plays() << "] "<< (*p).get_type(sts) << "  "<< (*p).get_atmpts(sts) << '\n';
        }
    std::cout << "Thanks for playing!";
    }
}

main.cpp:

stats sts;
std::list<stats> l_sts;
play_ball ball;
ball.play(l_sts);
sts.play(l_sts);

1 个答案:

答案 0 :(得分:1)

参数“ sts”是通过值而不是通过引用传递的。通过引用传递参数时,调用者和被调用者对该参数使用相同的变量。如果被调用方修改了参数变量,则效果对调用方的变量可见。当通过值传递参数时,调用方和被调用方有两个具有相同值的独立变量。如果被调用方修改了参数变量,则该效果对调用方不可见。