通过类函数添加指针向量

时间:2014-04-21 17:34:48

标签: c++ function class pointers vector

好吧,我最近才问过类似的问题,但是当我发布它时,我感到很累,很匆忙。基本上,我有这个父类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;
}

我的输出如下:

  

能力添加

     

火球

     

按任意键继续......

     

按任意键继续......

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

2 个答案:

答案 0 :(得分:2)

在没有看到GetName()函数的情况下,看起来该函数本身不会将能力名称打印到std :: cout。这意味着您需要在主要功能中使用cout << player1->myAbilities[0]->GetName() << endl;,而不仅仅是player1->myAbilities[0]->GetName();

答案 1 :(得分:0)

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

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