2013-03-04 87 views
-2

你好,我有三个类问题与C++铸造

  1. AbstSoccerTeam
  2. PlayersSoccerTeam
  3. PlayersFieldPlayerStates

PlayerSoccerTeam是一个子类AbstSoccerTeam的。

bool AlanSoccerTeam::isClosestTeamMemberToSupportingPlayer(FieldPlayer* plyr) 

是球员足球队的一种方法。

我试图打电话给在PlayersFieldPlayerStates类方法与此

PlayersSoccerTeam* sTeam; 
sTeam->isClosestTeamMemberToSupportingPlayer(player); 

我能得到这个问题,当我运行它

未初始化的局部变量“蒸汽”使用

我不知道发生了什么事情或为什么我得到这个错误。

任何帮助是极大 apprecitated感谢你

+0

它的意思正是它所说的;你有一个变量'sTeam',你试图在不初始化的情况下使用它。如果你不明白为什么这是一个问题,问问你自己'应该由Team'Team'代表哪支球队?''和'哪支球队_does_'Team'代表? (以及为什么/如何代表该团队?)' – bames53 2013-03-04 18:51:40

回答

1
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需要的护理那对你。

+0

而更安全的[原文如此]将使用'make_unique' ... – rubenvb 2013-03-04 18:50:16

1

问题是你已经创建了一个指向PlayersSoccerTeam的指针,但是你还没有实际创建对象。

我会建议这样做。

PlayersSoccerTeam sTeam; 
sTeam.isClosestTeamMemberToSupportingPlayer(player); 

你也可以做到这一点。

PlayersSoccerTeam* sTeam = new PlayersSoccerTeam() 
sTeam->isClosestTeamMemberToSupportingPlayer(player); 

作为也许是一个有趣的教育经验,创建打印的东西,当它运行到stdout,然后尝试做这两个选项一个构造函数和你看看会发生什么。无论何时创建新对象,都会运行构造函数。