问题与C++铸造
你好,我有三个类问题与C++铸造
- AbstSoccerTeam
- PlayersSoccerTeam
- PlayersFieldPlayerStates
PlayerSoccerTeam是一个子类AbstSoccerTeam的。
bool AlanSoccerTeam::isClosestTeamMemberToSupportingPlayer(FieldPlayer* plyr)
是球员足球队的一种方法。
我试图打电话给在PlayersFieldPlayerStates类方法与此
PlayersSoccerTeam* sTeam;
sTeam->isClosestTeamMemberToSupportingPlayer(player);
我能得到这个问题,当我运行它
未初始化的局部变量“蒸汽”使用
我不知道发生了什么事情或为什么我得到这个错误。
任何帮助是极大 apprecitated感谢你
PlayersSoccerTeam* sTeam;
这行声明一个指向PlayersSoccerTeam
,没有别的。你从这一行得到的只是一个指针。由于您尚未初始化,因此它没有指向任何地方。没有任何地方可以指向PlayersSoccerTeam
。
如果你想PlayersSoccerTeam
类型的对象,那么你只是想:
PlayersSoccerTeam sTeam;
sTeam.isClosestTeamMemberToSupportingPlayer(player);
既然你告诉我们你的层次,它可能是你想用你的PlayersSoccerTeam
多态为AbstSoccerTeam
。在这种情况下,您需要使用指针或引用。可以这样做,像这样:
AbstSoccerTeam* sTeam = new PlayersSoccerTeam();
// ...
delete sTeam;
注意,这仍然只是声明一个指针,但表达new PlayersSoccerTeam
还创建了一个PlayersSoccerTeam
对象的指针指向。请注意,将一个指向PlayersSoccerTeam
的指针指向其父代的指针AbstSoccerTeam
是完全正确的 - 这是多态行为。如果你这样做,你必须确保你以后再用delete sTeam;
,否则对象会被泄漏。
一个更安全的方式来处理动态分配对象的用户是使用智能指针,你可以做像这样:
std::unique_ptr<AbstSoccerTeam> sTeam(new PlayersSoccerTeam());
现在,你将不必delete
它,因为std::unique_ptr
需要的护理那对你。
而更安全的[原文如此]将使用'make_unique' ... – rubenvb 2013-03-04 18:50:16
问题是你已经创建了一个指向PlayersSoccerTeam的指针,但是你还没有实际创建对象。
我会建议这样做。
PlayersSoccerTeam sTeam;
sTeam.isClosestTeamMemberToSupportingPlayer(player);
你也可以做到这一点。
PlayersSoccerTeam* sTeam = new PlayersSoccerTeam()
sTeam->isClosestTeamMemberToSupportingPlayer(player);
作为也许是一个有趣的教育经验,创建打印的东西,当它运行到stdout,然后尝试做这两个选项一个构造函数和你看看会发生什么。无论何时创建新对象,都会运行构造函数。
它的意思正是它所说的;你有一个变量'sTeam',你试图在不初始化的情况下使用它。如果你不明白为什么这是一个问题,问问你自己'应该由Team'Team'代表哪支球队?''和'哪支球队_does_'Team'代表? (以及为什么/如何代表该团队?)' – bames53 2013-03-04 18:51:40