visualstudio2010-c++选角问题
visual studio 2010 - problems with c++ casting
你好,我有三个类
- AbsSoccerTeam
- PlayersSoccerTeam
- PlayersFieldPlayerStates
PlayerSoccerTeam是AbsSoccerTeam的一个儿童班。
bool AlanSoccerTeam::isClosestTeamMemberToSupportingPlayer(FieldPlayer* plyr)
是球员足球队中的一种方法。
我正试图用这个调用PlayersFieldPlayerStates类中的那个方法
PlayersSoccerTeam* sTeam;
sTeam->isClosestTeamMemberToSupportingPlayer(player);
当我运行时,我会遇到这个问题
未初始化的本地变量"sTeam"使用
我不知道发生了什么事,也不知道为什么我会犯这个错误。
任何帮助都会得到极大的重视感谢
问题是您已经创建了一个指向PlayersSoccerTeam的指针,但实际上还没有创建对象本身。
我建议你这样做。
PlayersSoccerTeam sTeam;
sTeam.isClosestTeamMemberToSupportingPlayer(player);
你也可以这样做。
PlayersSoccerTeam* sTeam = new PlayersSoccerTeam()
sTeam->isClosestTeamMemberToSupportingPlayer(player);
也许这是一种有趣的教育体验,创建一个构造函数,在运行时将某些内容打印到stdout,然后尝试执行这两个选项和您的选项,看看会发生什么。只要创建了新对象,就会运行构造函数。
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
会为您处理这些问题。
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 为windows实现一个自定义的unistd.h来处理VisualStudio问题