【问题标题】:Creating two separate instances from the same class causes them to be linked together?从同一个类创建两个单独的实例会导致它们链接在一起?
【发布时间】:2011-04-03 19:49:22
【问题描述】:

我遇到的问题是我从一个类中创建了两个不同的菜单。当我完成第一个时,一切都很好。但是,当我创建第二个并设置它的区域时,它也会修改前一个。当我调用仅翻转一个布尔变量的 Display() 时,它会同时翻转它,而不仅仅是我要调用的那个。

cMenu* gameMenu;
cMenu* spellMenu;

  gameMenu = new cMenu();
 for(int i=0; i< 25; i++)
  gameMenu->AddButton("test", i);
 AddGameObject(gameMenu);

 spellMenu = new cMenu();
 spellMenu->SetRegion(580, 50, 52, 250, FORMAT_5X1); // This modifies gameMenu as well
 spellMenu->Display(); // So does this
 g.AddGameObject(spellMenu);

【问题讨论】:

  • 您将 g.AddGameObject 用于 spellMenu 但只使用 gameMenu 的方法而不是 g 对象上的方法。

标签: pointers dynamic class new-operator instantiation


【解决方案1】:

我怀疑 cMenu 类的成员变量是静态的:因此内存中只有一份数据副本,当您为 spellMenu 更改它时,它也会为 gameMenu 更改。

您可以访问 cMenu 的代码吗?如果是这样,您可以查看在 cMenu::SetRegion() 中修改的变量。这些变量的定义是静态的吗?如果是这样,那就是你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 2012-02-18
    相关资源
    最近更新 更多