C++ c+的问题+;铸造
你好,我有三节课C++ c+的问题+;铸造,c++,visual-studio-2010,visual-c++,casting,C++,Visual Studio 2010,Visual C++,Casting,你好,我有三节课 Abssoccerteam 运动员足球队 PlayersFieldPlayerStates PlayerSoccerTeam是AbstSoccerTeam的一个子类 bool AlanSoccerTeam::isClosestTeamMemberToSupportingPlayer(FieldPlayer* plyr) 是足球队中的一种方法 我试图用这个函数调用PlayersFieldPlayerStates类中的方法 PlayersSoccerTeam* sTeam; sT
bool AlanSoccerTeam::isClosestTeamMemberToSupportingPlayer(FieldPlayer* plyr)
是足球队中的一种方法
我试图用这个函数调用PlayersFieldPlayerStates类中的方法
PlayersSoccerTeam* sTeam;
sTeam->isClosestTeamMemberToSupportingPlayer(player);
当我运行它时,我会遇到这个问题
使用未初始化的局部变量“sTeam”
我不知道发生了什么,也不知道为什么会出现这个错误
任何帮助都是非常感激的
谢谢你
PlayersSoccerTeam* sTeam;
这一行声明了一个指向播放器Soccerteam
的指针,没有其他内容。从这一行得到的只是一个指针。因为您还没有初始化,所以它不会特别指向任何地方。没有可指向的播放器Soccerteam
如果您想要类型为PlayersSoccerTeam
的对象,那么您只需要:
PlayersSoccerTeam sTeam;
sTeam.isClosestTeamMemberToSupportingPlayer(player);
由于您告诉我们您的层次结构,您可能希望将您的PlayersSoccerTeam
多态性用作abssoccerteam
。在这种情况下,您需要使用指针或引用。可以这样做:
AbstSoccerTeam* sTeam = new PlayersSoccerTeam();
// ...
delete sTeam;
注意,这仍然只声明了一个指针,但是表达式newplayerssoccerteam
也为指针创建了一个PlayersSoccerTeam
对象。请注意,将指向PlayersSoccerTeam
的指针指定给指向其父对象的指针是完全正确的-这是多态性的作用。如果这样做,必须确保删除sTeam代码>稍后,否则对象将泄漏
处理动态分配对象的用户的更安全的方法是使用智能指针,您可以这样做:
std::unique_ptr<AbstSoccerTeam> sTeam(new PlayersSoccerTeam());
std::unique_ptr sTeam(新播放器soccerteam());
现在,您不必删除它,因为std::unique\u ptr
会为您解决这个问题。问题是您已经创建了指向PlayerSoccerteam的指针,但实际上还没有创建对象本身
我建议这样做
PlayersSoccerTeam sTeam;
sTeam.isClosestTeamMemberToSupportingPlayer(player);
你也可以这样做
PlayersSoccerTeam* sTeam = new PlayersSoccerTeam()
sTeam->isClosestTeamMemberToSupportingPlayer(player);
也许是一次有趣的教育体验,创建一个构造函数,在stdout运行时将其打印到stdout,然后尝试执行这两个选项和您的选项,看看会发生什么。每当创建一个新对象时,构造函数就会运行。更安全的方法是使用make_unique
…它的意思就是它所说的;您有一个变量sTeam
,您试图在不初始化它的情况下使用它。如果你不明白为什么会出现这个问题,问问自己“哪个团队应该sTeam
代表?”和“哪个团队应该sTeam
代表?”?(为什么/如何代表该团队?)