微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使另一个函数可以访问本地结构实例C++

如何解决使另一个函数可以访问本地结构实例C++

所以我有一个结构体,它保存游戏中实体的变量(命中点、x 和 y 坐标等),并且我在全局范围内声明了该结构体。但是,我在“设置”函数中创建了实例,并希望在单独的“逻辑”函数修改它们的变量。但显然,由于实例是“setup”函数的本地实例,“logic”函数不能修改它们的变量。

这是我当前代码的简化。

return FutureBuilder(
            future: FirebaseAuth.instance.currentUser,builder: (ctx,futureSnapshot) => ListView.builder(
              reverse: true,//  So that 1st message goes to last.
              itemCount: chatDocument.length,itemBuilder: (ctx,index) => MessageBubble(
                message: chatDocument[index]['text'],isMe: chatDocument[index]['userId'],),);

解决方法

有几种不同的方法可以解决这个问题:

  1. dummy 移动到全局范围:
struct entity {
    int hp,atk,x,y;
};
entity dummy;

void Setup()
{
    dummy.hp = 10;
    dummy.atk = 2;
    dummy.x = 5;
    dummy.y = 5;
}

void Logic()
{
    if (dummy is attacked)
        dummy.hp -= 4;
}

int main()
{
    Setup();
    while (game is not over)
        Logic();
}
  1. dummy 移入 main(),然后通过引用(或指针)将其传递给 Setup()Logic()
struct entity {
    int hp,y;
};

void Setup(entity &e)
{
    e.hp = 10;
    e.atk = 2;
    e.x = 5;
    e.y = 5;
}

void Logic(entity &e)
{
    if (e is attacked)
        e.hp -= 4;
}

int main()
{
    entity dummy;
    Setup(dummy);
    while (game is not over)
        Logic(dummy);
}
  1. 上面#2 的扩展,然后您可以将 Setup()Logic() 移动到结构本身中:
struct entity {
    int hp,y;
    void Setup();
    void Logic();
};

void entity::Setup()
{
    hp = 10;
    atk = 2;
    x = 5;
    y = 5;
}

void entity::Logic()
{
    if (is attacked)
        hp -= 4;
}

int main()
{
    entity dummy;
    dummy.Setup();
    while (game is not over)
        dummy.Logic();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。