运行我的代码时,它可以很好地编译,但是我不明白为什么它没有迭代并打印出我的列表。
我有一个子类Games
和超类:play_ball
和statistics
。
目标是让玩家玩游戏,跟踪他们赢得比赛的尝试次数。在每次播放的结尾,它将跟踪每个播放的统计信息并将其推到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);
答案 0 :(得分:1)
参数“ sts”是通过值而不是通过引用传递的。通过引用传递参数时,调用者和被调用者对该参数使用相同的变量。如果被调用方修改了参数变量,则效果对调用方的变量可见。当通过值传递参数时,调用方和被调用方有两个具有相同值的独立变量。如果被调用方修改了参数变量,则该效果对调用方不可见。