【问题标题】:Adding A Pointer To A Class Instance From The End Of One Vector To Another将指向类实例的指针从一个向量的末尾添加到另一个向量
【发布时间】:2015-12-22 18:34:58
【问题描述】:

所以在程序中有一个叫做 cardDeck 的向量,它包含多个指向一个叫做 Card 的类的实例的指针:

std::vector<Card*> cardDeck;                                

同样,还有一个称为 charCards 的向量也包含多个指向名为 card 的类的实例的指针:

std::vector<Card*> charCards;                              

部分程序功能是将指向卡片类实例的指针从cardDeck向量的末尾添加到charCards向量的末尾:

charCards.push_back(cardDeck.back());                                                                               //Add the card selected from the deck to the Player's vector of initialisation cards

例如,如果您从第一张卡片开始:

然后添加第二张卡片,而不是像这样显示第一张卡片与第二张卡片对齐,这是应该发生的:

相反,只有第二张卡片(即添加到向量中的最新卡片)被渲染到屏幕上:

问题是 - 为什么在添加新的 charCards 向量中的最后一个实例之前属于卡片类实例的精灵会停止渲染?

【问题讨论】:

  • 你能澄清“数据丢失”吗?
  • 基本上我使用 SFML 来表示游戏中的图形,并且每个卡片类实例都包含一个用于在视觉上表示它的精灵 - 每个指向 cardDeck 向量中卡片类实例的指针都有一个表示它的初始化精灵,并且渲染函数遍历每个实例并渲染其精灵。问题是当卡片从一个向量传输到另一个向量时,仅呈现向量中的最后一个卡片类实例,这表明数据丢失。

标签: c++ class pointers object vector


【解决方案1】:

在某个地方,在您没有向我们展示的代码中,您正在创建一个指向局部变量的指针,并将该指针推入容器中。然后,你又来了。又一次。

问题是,这些都是所有悬空指针,它们甚至可能包含相同的地址(尽管不能保证)。这就是为什么您会在每个元素“中”看到相同的值。

  • 不要存储指针,或者
  • 不要存储悬空指针。

【讨论】:

  • 但是例如在程序中的另一个函数中,有一个循环渲染属于指向存储在另一个向量中的类实例的指针的精灵,渲染循环如下所示: for (int i = 0; i getCharacter());问题是在这种情况下,所有的魔法精灵都渲染了,但是在渲染上面的卡片时,渲染函数看起来完全一样,但不起作用,所以看起来有一个
  • 将指向类实例的指针从一个向量转移到另一个向量的问题,很高兴知道它是什么。
  • @Enchanter 我敢肯定它会,但如果没有实际向我们展示测试用例,我们不可能知道出了什么问题。
  • @Enchanter 仍然没有测试用例。我们如何调试看不到的代码?
猜你喜欢
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 2021-01-23
  • 2020-07-23
相关资源
最近更新 更多