【问题标题】:problems with c++ casting [closed]c++ 铸造问题[关闭]
【发布时间】:2013-03-04 18:33:46
【问题描述】:

你好,我有三门课

  1. AbstSoccerTeam
  2. 球员足球队
  3. PlayersFieldPlayerStates

PlayerSoccerTeam 是 AbstSoccerTeam 的子类。

bool AlanSoccerTeam::isClosestTeamMemberToSupportingPlayer(FieldPlayer* plyr)

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

我正在尝试使用此方法在 PlayersFieldPlayerStates 类中调用该方法

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

我运行时会遇到这个问题

使用了未初始化的局部变量“sTeam”

我不知道发生了什么或为什么会收到此错误。

非常感谢任何帮助 谢谢你

【问题讨论】:

  • 这就是它所说的意思;你有一个变量sTeam,你尝试使用它而不初始化它。如果您不明白为什么这是个问题,请问自己“应该 sTeam 代表哪个团队?”和'sTeam 代表哪个团队? (以及它为什么/如何代表该团队?)'

标签: c++ visual-studio-2010 visual-c++ casting


【解决方案1】:

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

我建议这样做。

PlayersSoccerTeam sTeam;
sTeam.isClosestTeamMemberToSupportingPlayer(player);

您也可以这样做。

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

也许是一次有趣的教育经历,创建一个构造函数,在运行时将某些内容打印到标准输出,然后尝试执行这两个选项,看看会发生什么。每当创建新对象时都会运行构造函数。

【讨论】:

    【解决方案2】:
    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...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2021-01-16
    • 2023-04-04
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多