好吧,我最近才问过类似的问题,但是当我发布它时,我感到很累,很匆忙。基本上,我有这个父类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;第一次暂停后第二次。我希望我能清楚地解释这一点,并提供足够的信息,因为每当我尝试研究指针参数(或通过指针传递)时,它总会向我显示有关函数指针的内容。
答案 0 :(得分:2)
在没有看到GetName()函数的情况下,看起来该函数本身不会将能力名称打印到std :: cout。这意味着您需要在主要功能中使用cout << player1->myAbilities[0]->GetName() << endl;
,而不仅仅是player1->myAbilities[0]->GetName();
。
答案 1 :(得分:0)
我认为你的GetName函数可能只返回名称。然后,您需要打印返回的名称。
如果不是这样,那么在第一次暂停后,检查myAbilities矢量的大小。应为1.如果为1,请检查myAbilities [0]中指针的值,以查看它是否与传递给AddAbility的值相同。应该是。