【问题标题】:Adding to a vector of pointers through a class function [closed]通过类函数添加到指针向量[关闭]
【发布时间】:2014-06-05 19:40:14
【问题描述】:

好的,我最近有点类似的问题,但是我在发布时感到疲倦和匆忙。基本上,我有这个父类Unit,它包含一个指向Ability 类的指针向量。

public:
vector <Ability*>  myAbilities;

我还有一个内置到类中的函数来添加new Ability,以便更轻松地为Unit开发和添加新技能

void AddAbility(Ability * ability)
{
    myAbilities.push_back(ability);
    cout<<"Ability added"<<endl;
    cout<<ability->GetName()<<endl;
}

当我使用它时,它看起来像这样:

AddAbility(new Fireball());

现在,我的问题是当我测试火球信息是否仍然存在时,它不像调用AddAbility() 函数时那样显示。

#include <iostream>
#include <string>
#include "Profession.h"
using namespace std;

int main()
{
    // Player being a child class of Unit
    Player * player1 = new Mage;
    system("pause");

    player1->myAbilities[0]->GetName(); 
    system("pause");

    delete player1;
    player1 = NULL;
    return 0;
}

我的输出如下所示:

能力增加

火球

按任意键继续...

按任意键继续...

该技能的名称似乎不再存在,因为它应该在第一次暂停后第二次显示“火球”。我希望我清楚地解释了这一点并提供了足够的信息,因为每次我尝试研究指针参数(或通过指针传递)时,它总是向我展示有关函数指针的内容。

【问题讨论】:

  • Mage 的构造函数是什么?
  • 您的问题未能确定导致问题的代码的足够部分。
  • 它拒绝让我编辑,所以我的构造函数是:Mage::Mage() { myName = "---"; myRoleName = "法师";我的角色 = 法师;我的健康= 100;我的法力 = 50;我的防御 = 5;我的伤害 = 10;我的魔法伤害 = 10;我的魔法防御 = 3; AddAbility(新火球()); }

标签: c++ function class pointers vector


【解决方案1】:

我认为您的 GetName 函数可能只是返回名称。然后您需要打印返回的名称。

如果不是这样,那么在您第一次暂停后,立即检查 myAbilities 向量的大小。应该是 1。如果是 1,检查 myAbilities[0] 中指针的值,看看它是否与传递给 AddAbility 的值相同。应该是的。

【讨论】:

  • 是的,我忘了在调用函数之前输入cout&lt;&lt;...我现在感觉很愚蠢...在发布这个问题之前我已经做了你说的所有其他事情...不过还是谢谢你。 >.
【解决方案2】:

在没有看到 GetName() 函数的情况下,似乎该函数本身不会将能力名称打印到 std::cout。这意味着您需要在主函数中包含cout &lt;&lt; player1-&gt;myAbilities[0]-&gt;GetName() &lt;&lt; endl;,而不仅仅是player1-&gt;myAbilities[0]-&gt;GetName();

【讨论】:

  • 天哪....我现在感觉好傻....谢谢>.
  • @Uulamock 没问题 - 我们所有人都会不时犯愚蠢的错误。如果有帮助,请务必点击答案左侧的复选标记!
  • @Invictus 感谢提醒打勾,使用stackoverflow还是有点新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 2021-07-07
  • 1970-01-01
相关资源
最近更新 更多